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 最佳实践大全,适用于生产环境(反向代理 / 静态站点 / API 网关场景)。

1. 目录结构最佳实践

/etc/nginx/
├── nginx.conf               # 主配置
├── conf.d/                  # 各服务独立配置
│   ├── api.conf
│   ├── web.conf
│   └── ssl.conf
├── mime.types
├── modules-enabled/         # 动态模块
└── snippets/                # 公用片段(例如 SSL、proxy)
  • 不推荐把所有配置堆在 nginx.conf
  • 推荐按应用拆分,保证可维护性。

2. 核心配置最佳实践(nginx.conf)

worker 配置(自适应 CPU)

worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 200000;

事件调优

events {
    use epoll;
    worker_connections 65535;
    multi_accept on;
}

HTTP 全局优化

http {
    sendfile on;
    sendfile_max_chunk 512k;

    tcp_nopush on;
    tcp_nodelay on;

    keepalive_timeout 15;
    keepalive_requests 10000;

    client_max_body_size 50m;

    gzip on;
    gzip_types text/plain text/css application/json application/javascript;

    include mime.types;
    default_type application/octet-stream;

    include /etc/nginx/conf.d/*.conf;
}

3. HTTP/2 + SSL 最佳实践

推荐写法(你已经纠正过的:http2 on; 分行写)

server {
    listen 443 ssl;
    http2 on;

    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

强加密套件建议

    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_prefer_server_ciphers on;
    ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:...';

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

4. 反向代理最佳实践

通用 proxy 配置(建议放 snippets)

proxy_set_header Host               $host;
proxy_set_header X-Real-IP          $remote_addr;
proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto  $scheme;

proxy_connect_timeout   5s;
proxy_send_timeout      30s;
proxy_read_timeout      30s;
proxy_buffering         on;
proxy_buffers           32 32k;
proxy_busy_buffers_size 64k;

5. 静态 Web 应用(Vue/Umi/React)最佳实践

支持 SPA history 模式

location / {
    try_files $uri $uri/ /index.html;
}

静态文件缓存

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

6. 安全最佳实践

防止点击劫持

add_header X-Frame-Options SAMEORIGIN;

防止 XSS

add_header X-XSS-Protection "1; mode=block";

强制 HSTS(仅在 HTTPS 完全稳定后开启)

add_header Strict-Transport-Security "max-age=63072000" always;

隐藏 Nginx 版本

server_tokens off;

7. 性能调优最佳实践(高并发)

项目 推荐值 说明
worker_processes auto 自适应 CPU
worker_connections 65535 高连接负载
worker_rlimit_nofile 200000 文件句柄
sendfile on 零拷贝
gzip on 流量优化
keepalive_timeout 15s 可持续连接
proxy_buffering on 降低后端压力

8. 日志规范

log_format main '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" '
                '$request_time $upstream_response_time';

access_log /var/log/nginx/access.log main;
error_log  /var/log/nginx/error.log warn;

建议配合 ELK / Loki 收集。

9. 部署 & 热更新

检查配置

nginx -t

平滑重载(不中断服务)

nginx -s reload

10. 常见风险点(上线必查)

  • HTTPS 证书是否续期
  • gzip 是否压缩 js/css
  • history 模式是否配置 try_files
  • error_page 是否正常
  • proxy 超时是否符合服务 SLA
  • 是否忘记设置 client_max_body_size

11. 版本升级最佳实践

Nginx 主线版本每天都优化 HTTP/2 & QUIC

建议使用:

  • 稳定版:1.24.x
  • 主线版:1.27.x(支持 HTTP/3)