Nginx作为高性能的Web服务器和反向代理,可以通过多种方式进行优化以提高性能。以下是一些关键的优化策略:
worker_processes auto; # 自动设置为CPU核心数
worker_cpu_affinity auto; # CPU亲和性绑定(仅Linux)
worker_rlimit_nofile 65535; # 每个worker能打开的文件描述符数量
events {
worker_connections 10240; # 每个worker的最大连接数
use epoll; # Linux下高性能事件模型
multi_accept on; # 一次接受多个连接
}
http {
sendfile on; # 启用sendfile系统调用
tcp_nopush on; # 仅在sendfile开启时有效
tcp_nodelay on; # 禁用Nagle算法
keepalive_timeout 65; # 保持连接超时时间
keepalive_requests 1000; # 单个连接最大请求数
client_max_body_size 10m; # 最大上传文件大小
client_body_buffer_size 128k; # 客户端请求体缓冲区大小
open_file_cache max=10000 inactive=20s; # 文件描述符缓存
open_file_cache_valid 30s; # 缓存检查时间
open_file_cache_min_uses 2; # 最少使用次数才缓存
open_file_cache_errors on; # 缓存错误信息
}
server {
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d; # 长期缓存静态资源
access_log off; # 关闭日志记录
add_header Cache-Control "public, immutable";
}
}
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1024; # 小于1KB不压缩
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256...';
ssl_stapling on;
ssl_stapling_verify on;
upstream backend {
server 127.0.0.1:8080;
keepalive 32; # 保持连接池大小
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 16k;
}
}
启用HTTP/2:
listen 443 ssl http2;
启用Brotli压缩(需要额外模块):
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
调整内核参数(Linux):
# 增加本地端口范围
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
# 增加TCP最大半连接队列
echo "net.ipv4.tcp_max_syn_backlog = 65536" >> /etc/sysctl.conf
# 启用TCP快速打开
echo "net.ipv4.tcp_fastopen = 3" >> /etc/sysctl.conf
sysctl -p
使用最新版本:始终使用最新的稳定版Nginx以获得最佳性能和新特性。
nginx -t
测试配置更改stub_status
模块提供基本状态信息ngx_http_status_module
或第三方工具如Prometheus+Grafana这些优化策略应根据您的具体应用场景和服务器环境进行调整,建议每次只修改一个参数并测试效果。