以下是一些有效的Nginx性能优化方法,涵盖配置调优、系统参数调整和架构优化等方面:
worker_processes auto; # 自动匹配CPU核心数
worker_rlimit_nofile 100000; # 每个worker能打开的文件描述符上限
events {
worker_connections 10240; # 每个worker的最大连接数
use epoll; # Linux高性能事件模型
multi_accept on; # 一次性接受所有新连接
}
http {
sendfile on; # 启用零拷贝传输
tcp_nopush on; # 合并数据包减少网络开销
tcp_nodelay on; # 禁用Nagle算法,提升实时性
keepalive_timeout 30; # 保持连接超时时间
keepalive_requests 1000; # 单个连接的最大请求数
reset_timedout_connection on; # 关闭超时连接释放资源
}
location ~* \.(jpg|css|js|gif|png)$ {
expires 365d; # 长期缓存
access_log off; # 关闭日志减少IO
add_header Cache-Control "public";
}
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 10m;
location / {
proxy_cache my_cache;
proxy_pass http://backend;
}
upstream backend {
least_conn; # 最少连接数策略
server 10.0.0.1:80 weight=3;
server 10.0.0.2:80;
server 10.0.0.3:80 backup; # 备用服务器
}
upstream backend {
keepalive 32; # 保持到后端的长连接数
server 10.0.0.1:80;
}
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
}
# 增加端口范围
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
# 提高TCP连接复用能力
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
# 应用配置
sysctl -p
# 修改系统限制
echo "nginx soft nofile 100000" >> /etc/security/limits.conf
echo "nginx hard nofile 100000" >> /etc/security/limits.conf
启用Gzip压缩:
gzip on;
gzip_types text/plain text/css application/json application/javascript;
禁用访问日志(高负载时):
access_log off;
使用HTTP/2:
listen 443 ssl http2;
静态资源分离:
将静态文件托管到CDN或独立域名(如 static.example.com),减少主站负载。
启用状态页:
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
}
日志分析工具:
使用 GoAccess、ELK 或 Prometheus + Grafana 监控请求延迟、错误率等指标。
wrk、ab 或 jmeter 压测验证优化效果。通过以上方法,可显著提升Nginx的吞吐量、降低延迟,并提高资源利用率。建议根据实际业务场景逐步调整并测试效果。