Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Nginx 注意事项

下面给你一份 真正实用、生产环境级别的《Nginx 注意事项大全》,涵盖安全、性能、部署、反代、静态站点、HTTP2、HTTPS、日志、系统层、限流、缓存等关键点。 非常适合作为 Nginx 项目上线 Checklist。

1. 基础概念部分

Nginx 是事件驱动的,worker 数量与 CPU 绑定(不要乱改)

  • worker_processes auto;
  • CPU=2 就 2 worker;CPU=16 就 16 worker。

worker_connections 决定最大并发

最大并发 ≈ worker_processes × worker_connections

默认值太小必须调大:

worker_connections 65535;

2. 性能调优注意事项

连接数限制

必须确保 Linux 系统也调大:

ulimit -n 200000

epoll 必须开启(默认)

use epoll;

multi_accept 可以提升高并发抢连接能力

multi_accept on;

keepalive upstream 要配置,不然 upstream 会被频繁重连

keepalive 64;

3. 反向代理注意事项

必须传递 Host,否则很多后端会判错域名

正确:

proxy_set_header Host $http_host;

不要写:

proxy_set_header Host $host;

差别:

  • $host -> 域名变化时可能变成 server_name
  • $http_host -> 保留客户端真实 Host

代理到 HTTPS 必须加

proxy_ssl_server_name on;

否则某些服务(如微信 API、云服务)会报 SNI 错。

定义 proxy 设置不要重复写

统一写在 http {} 或 include 文件:

proxy_http_version 1.1;
proxy_set_header Connection "";

4. 静态资源注意事项

root 与 alias 不要混用,不要写错

root 会拼接路径:

location /admin/  
root /data/www;  
==> /data/www/admin/xxx

alias 是直接替换路径:

location /admin/  
alias /data/www/admin/;  
==> /data/www/admin/xxx

try_files 必须写最后 fallback

SPA 必须:

try_files $uri $uri/ /index.html;

5. 跨域 CORS 注意事项

生产不能写 *,必须指定域名:

add_header Access-Control-Allow-Origin https://example.com;

6. HTTP/2 注意事项

新写法

listen 443 ssl; http2 on;

旧写法会报 deprecated

listen 443 ssl http2;   # 已过期

7. HTTPS / SSL 注意事项

TLS 版本

ssl_protocols TLSv1.2 TLSv1.3;

确保 session cache 开启

ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;

开启 session tickets

ssl_session_tickets on;

证书权限不要错

chmod 600 certificate.key

8. 日志注意事项

access.log 建议在高并发下关闭或降低日志级别

大量并发会写满磁盘 IO:

access_log off;

error_log 推荐 warn 级别

error_log /var/log/nginx/error.log warn;

9. 系统层调优注意事项

写入 /etc/sysctl.conf:

fs.file-max = 1000000
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.ip_local_port_range = 1024 65000

然后:

sysctl -p

10. 安全注意事项(重点)

禁止版本号泄露

server_tokens off;

禁止访问敏感路径

location ~ /\.(git|svn|hg) {
    deny all;
}

静态目录必须限制执行权限

防止上传 .php、.sh:

location ~* \.(php|sh)$ {
    deny all;
}

11. 限流注意事项

请求限流:

limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;

server {
    limit_req zone=req burst=20 nodelay;
    limit_conn conn 20;
}

12. 缓存注意事项

静态资源缓存(强缓存)

location ~* \.(jpg|png|css|js|svg|woff2)$ {
    expires 30d;
    access_log off;
}

代理缓存(慎用)

proxy_cache_path /data/cache levels=1:2 keys_zone=cache:100m inactive=7d;

13. 常见踩坑事项

alias 最后必须加 /

否则路径会错。

SPA 应用必须用 try_files,否则 history 路由会 404

proxy_pass 末尾是否带 / 会改变路径匹配

举例:

location /api/ {
    proxy_pass http://backend/;
}

和:

proxy_pass http://backend;

结果不同。

Nginx + Node/Java/Python upstream 未设置 keepalive 时会 OOM

error_page 会影响代理行为,必须小心

14. 部署上线注意事项

上线前必须执行:

nginx -t

并优雅 reload:

nginx -s reload

15. Docker 部署注意事项

不要把配置写入镜像层

配置放到挂载目录:

-v /etc/nginx/conf.d:/etc/nginx/conf.d

Keepalive 文件描述符一定要调大,否则容器内会被限制