参考资料

  1. Nginx配置文件详细说明以及案例
  2. 如何结合WAF使用Nginx提高安全性?
  3. nginx反向代理配置详解
  4. Nginx请求频率限制模块详细说明以及案例
  5. nginx 配置多个server
  6. Nginxsendfile 零复制指令详细说明以及案例
  7. 实现完整离线浏览,需配合Service Worker
  8. NginxuWSGI模块配置详细说明以及案例

Nginx 性能优化配置示例

1. 调整 Worker 进程和连接数

worker_processes auto;  # 自动匹配 CPU 核心数
worker_rlimit_nofile 100000;  # 提高文件描述符限制
events {
    worker_connections 4096;  # 每个 worker 的最大连接数
    use epoll;  # Linux 高性能事件模型
    multi_accept on;  # 允许 worker 同时接受多个连接
}

2. 启用 Gzip 压缩

gzip on;
gzip_min_length 1k;  # 最小压缩文件大小
gzip_comp_level 6;  # 压缩级别(1-9)
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_vary on;  # 根据客户端支持情况启用压缩
gzip_disable "MSIE [1-6]\.";  # 禁用旧版 IE 的压缩

3. 静态文件缓存优化

location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|woff|ttf|svg)$ {
    expires 365d;  # 缓存 1 年
    access_log off;  # 关闭访问日志
    add_header Cache-Control "public, immutable";  # 强制缓存
}

4. 启用 Keep-Alive

keepalive_timeout 65;  # 保持连接 65 秒
keepalive_requests 1000;  # 单个连接最大请求数

5. 调整缓冲区大小

client_body_buffer_size 16k;
client_header_buffer_size 4k;
client_max_body_size 8m;  # 限制上传文件大小
large_client_header_buffers 4 16k;  # 大请求头缓冲区

6. 优化 FastCGI(PHP-FPM)

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 256 16k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_read_timeout 60s;
}

7. 限制请求速率(防 DDoS)

limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

server {
    limit_req zone=req_limit burst=20 nodelay;
    limit_conn conn_limit 100;
}

8. 关闭访问日志(可选)

access_log off;  # 生产环境可关闭日志
error_log /var/log/nginx/error.log warn;  # 仅记录警告及以上错误

9. 启用 TCP 优化(适用于高并发)

http {
    sendfile on;  # 零拷贝传输文件
    tcp_nopush on;  # 减少数据包数量
    tcp_nodelay on;  # 禁用 Nagle 算法
}

10. 使用 HTTP/2(提升 HTTPS 性能)

server {
    listen 443 ssl http2;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
}

优化后检查

nginx -t  # 测试配置是否正确
systemctl restart nginx  # 重启生效

这些配置可根据实际服务器负载进一步调整。