全局配置
user jw jw; ## 配置 worker 进程的用户和组
#当遇到403错误时,多半是这个配置的问题,直接 user root;即可
worker_processes auto; ## 配置 worker 进程启动的数量,建议配置为 CPU 核心数
error_log logs/error.log; ## 全局错误日志
pid /run/nginx.pid; ## 设置记录主进程 ID 的文件
worker_rlimit_nofile 10240; ## 单个后台 worker process 进程的最大文件数,默认1024
events {
#epoll 是多路复用 IO(I/O Multiplexing)中的一种方式,比select的效率更高
# use epoll
# 单个后台 worker process 进程的最大并发链接数,这个值要小于等于worker_rlimit_nofile
worker_connections 10240;
}
http的几个默认配置解释
http{
include mime.types; # 文件扩展名与类型映射表
default_type application/octet-stream;# 默认文件类型
sendfile on; #开启高效传输模式,nginx常作为静态资源服务器,这个大大提高了性能
tcp_nopush on; #提高网络包的传输效率(多个包整合发送,减少发送次数,延迟发送,实时性低),前提是开启sendfile
keepalive_timeout 65; #长连接超时时间,单位是秒
keepalive_requests 100; #每个连接最大的请求数,当送达的请求数超过该值后,该连接就会被关闭。
tcp_nodelay on; #强调实时性,与tcp_nopush为对应配置
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #日志格式
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main; #成功日志
}
错误页面
# 开启探测
# fastcgi: fastcgi_intercept_errors on;
# uwsig: uwsgi_intercept_errors on;
proxy_intercept_errors on;
# 定义错误页面码,如果出现相应的错误页面码,转发到那里。
error_page 404 403 500 502 503 504 /404.html;
# 承接上面的location。
location = /404.html {
# 放错误页面的目录路径。
root /home/project/pb;
}
禁止通过ip来访问
#这个server是新增,不是修改
server{
listen 80 default;
server_name _;
return 404;
}
后台访问限制
location /admin/{
allow youip; #先允许
allow 127.0.0.1;
deny all; #后拒绝所用
}
一个站点配置多个域名
server {
listen 80;
server_name ops-coffee.cn b.ops-coffee.cn;
}
一个服务器配置多个站点
server {
listen 80;
server_name www.test.com;
client_max_body_size 100M;
location / {
try_files $uri @www;
}
location @www{
internal;
proxy_pass http://127.0.0.1:6666;
include req_proxy.conf;
}
}
server {
listen 80;
server_name maven.test.com;
client_max_body_size 20M;
location / {
try_files $uri @maven;
}
location @maven {
internal;
proxy_pass http://192.168.1.103:8081;
include req_proxy.conf;
}
}
server {
listen 8080;
server_name xxx.test.com;
client_max_body_size 20M;
location / {
try_files $uri @maven;
}
location @maven {
internal;
proxy_pass http://192.168.1.103:8080;
include req_proxy.conf;
}
}
隐藏Nginx版本号
http {
..
server_tokens off; #添加这一行内容即可
..
}
301http转至https
server {
listen 80;
server_name www.domain.com domain.com;
#为什么用return而不用,rewrite,return是直接返回,rewrite是正则匹配
# return的性能会比rewrite高
return 301 https://www.domain.com$request_uri;
}
http2
server {
listen 443 ssl http2;
server_name default_server;
ssl_certificate server.crt;
ssl_certificate_key server.key;
...
}
静态文件路由不进access.log
location ^~ /static/ {
alias /home/static/;
access_log off; #对于静态文件,不记录日志
}
增加响应头
location /pdf {
add_header Content-Disposition 'inline;filename="inline.pdf"';
alias C:/Users/root/Desktop/GOProject/documents/pdf;
}
使用include导入配置
http{
include servers/*.conf; #导入与nginx.conf同级中servers文件夹下所有的.conf
}
举例:XX.conf
upstream apis {
ip_hash;
server 127.0.0.1:8080;
}
server {
listen 14800;
server_name 10.25.138.20;
client_max_body_size 2048m;
...
}
请求的限制
keepalive_timeout 60; # 处理时间
client_header_timeout 10s; # 用户请求头的超时时间
client_body_timeout 10s; # 用户请求体的超时时间
client_max_body_size 100m; # 用户请求体最大字节数,默认是1m
send_timeout 10s; #服务端向客户端传输数据的超时时间
resolver_timeout 5s; #域名解析超时,默认30s
FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度
fastcgi_connect_timeout 300; 指定连接到后端fastCGI的超时时间
fastcgi_send_timeout 300; 向fastCGI请求的超时时间,这个值是指已经完成两次握手后向fastCGI传送的超时时间
fastcgi_read_timeout 300; 接收fastCGI应答的超时时间,这个值已经完成两次握手后接收fastCGI应答的超时时间
fastcgi_buffer_size 64k; 指定读取fastCGI应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,一般设置为64k
fastcgi_buffers 4 64k; 指定本地需要用多少和多大的缓冲区来缓冲fastCGI的应答
fastcgi_busy_buffers_size 128k; 默认值是fastcgi_buffers的两倍
fastcgi_temp_file_write_size 128k; 在写入fastcgi_temp_path是用多大的数据块,默认值是fastcgi_buffers两倍
开启列目录
当你想让nginx作为文件下载服务器存在时,需要开启nginx列目录
server {
location download {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
autoindex_exact_size: 为on(默认)时显示文件的确切大小,单位是byte;改为off显示文件大概大小,
单位KB或MB或GB
autoindex_localtime: 为off(默认)时显示的文件时间为GMT时间;改为on后,显示的文件时间为服务器时间
默认当访问列出的txt等文件时会在浏览器上显示文件的内容,如果你想让浏览器直接下载,加上下边的配置
if ($request_filename ~* \.(txt|pdf|jpg|png)$) {
add_header Content-Disposition 'attachment';
}
拒绝User-Agent
if ($http_user_agent ~* (Wget|ab|curl) ) {
return 444;
}
可能有一些不法者会利用wget/curl等工具扫描我们的网站,我们可以通过禁止相应的user-agent来简单的防范
Nginx的444状态比较特殊,如果返回444那么客户端将不会收到服务端返回的信息,就像是网站无法连接一样
WebSocket
1)编辑nginx.conf,在http区域内一定要添加下面配置:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
map指令的作用:
该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_upgrade的值,即根据变量
$http_upgrade的值创建新的变量$connection_upgrade,创建的规则就是{}里面的东西。其中的规则没有做
匹配,因此使用默认的,即 $connection_upgrade 的值会一直是 upgrade。然后如果 $http_upgrade为空
字符串的话,那值会是 close。
2)在location匹配配置中添加如下内容:
示例如下:
upstream socket.kevin.com {
hash $remote_addr consistent;
server 10.0.12.108:9000;
server 10.0.12.109:9000;
}
location ^~ ws/ {
proxy_pass http://socket.kevin.com;
proxy_set_header Host $host:$server_port;
proxy_http_version 1.1; #默认的是1.0,websocket一定要配置为1.1
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}