本文记录了 Nginx 常用配置 以及 在配置过程中遇到的问题
常用配置
不同协议配置
- HTTP
listen 80
- HTTPS
listen 443 ssl
- UDP
listen 85 udp
配置HTTPS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| listen 80; listen 443; ssl on; ssl_certificate /home/ssl/fullchain.pem; #或者fullchain.crt fullchain.cer ssl_certificate_key /home/ssl/privkey.pem; #或者privkey.key ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS; ssl_session_cache builtin:1000 shared:SSL:10m;
if ($scheme != "https"){ return 497; } #由于上面开启强制 ssl 所以会产生 497 错误 这个错误重定向到 443 端口 error_page 497 https://$host$request_uri;
# 或者直接用rewrite重定向 if ($scheme != "https"){ rewrite ^.*$ https://$host$request_uri permanent; }
|
下载速度限制
1 2 3 4
| location / { limit_rate_after 10m; limit_rate 512k; }
|
反向代理配置
1 2 3 4 5 6 7 8 9 10
| location / { proxy_pass http://localhost:8081; # 代理转发的地址 proxy_set_header Host $host; # 代理转发HOST proxy_set_header X-Real-IP $remote_addr; # 代理转发远程IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 代理转发途经IP proxy_set_header X-Forwarded-Proto $scheme; # 代理转发协议 proxy_connect_timeout 300s; # 代理连接超时 proxy_read_timeout 300s; # 代理读取超时 proxy_send_timeout 300s; # 代理发送超时 }
|
URL重写到 index.php
文件测试模式
1
| try_files $uri $uri/ /index.php?$uri&$args;
|
文件名称判断
1 2 3
| if (!-e $request_filename) { rewrite (.*) /index.php last; }
|
重写目录和文件
1 2 3 4 5 6
| if (!-d $request_filename) { rewrite ^/(.+)/$ /$1 permanent; } if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?/$1 last; }
|
允许跨域访问
1 2 3
| add_header Access-Control-Allow-Headers x-requested-with,content-type; add_header Access-Control-Allow-Methods POST,GET; add_header Access-Control-Allow-Origin *;
|
取消iframe跨域安全限制(IE上有这个问题)
1
| add_header P3P "CP=CAO PSA OUR";
|
开启目录
1 2 3
| autoindex on; autoindex_exact_size off; autoindex_localtime on;
|
解决中文乱码
上传大小配置
1
| client_max_body_size 50M;
|
配置 GZIP 压缩
1 2 3 4 5 6 7 8
| gzip on; gzip_static on; gzip_min_length 1024; # GZIP 最小压缩长度 只有大于这个长度才会被 gzip gzip_buffers 4 16k; gzip_comp_level 3; # GZIP 压缩等级 gzip_types application/json text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #开启GZIP的类型 gzip_vary on; gzip_disable "MSIE [1-6]\."; #取消IE上的gzip因为不支持
|
WebSocket代理设置
1 2 3 4 5 6
| location /ws/ { proxy_pass http://wsbackend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
|
上游服务器设置
1 2 3 4 5 6
| upstream wsbackend { hash $remote_addr consistent; #哈希一致性 server 127.0.0.1:8010; #正常代理 server 127.0.0.1:12345 max_fails=3 fail_timeout=30s; #最大失败次数3 失败超时30秒 server unix:/tmp/backend3; # Unix网络连接 }
|
关闭非法头部过滤(用于带有特殊头部的系统请求)
1
| ignore_invalid_headers off;
|
设置为 root
用户启动
常见问题
- 配置文件提示
could not build the server_names_hash, you should increase server_names_hash_bucket_size: xx
- 原因: 由于哈希表大小不足以存储服务器别名
- 解决方案: 配置文件
http{...}
添加一行配置 server_names_hash_bucket_size 64;