全局配置
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 进程的最大文件数,默认1024events {#epoll 是多路复用 IO(I/O Multiplexing)中的一种方式,比select的效率更高# use epoll# 单个后台 worker process 进程的最大并发链接数,这个值要小于等于worker_rlimit_nofileworker_connections 10240;}
http的几个默认配置解释
http{include mime.types; # 文件扩展名与类型映射表default_type application/octet-stream;# 默认文件类型sendfile on; #开启高效传输模式,nginx常作为静态资源服务器,这个大大提高了性能tcp_nopush on; #提高网络包的传输效率(多个包整合发送,减少发送次数,延迟发送,实时性低),前提是开启sendfilekeepalive_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.confupstream 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; # 用户请求体最大字节数,默认是1msend_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,一般设置为64kfastcgi_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或GBautoindex_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.1proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}
