以下是一个详细的Nginx配置优化实例分析,包含常见场景的优化方案和配置示例:
1. 工作进程优化
worker_processes auto; # 自动匹配CPU核心数
worker_cpu_affinity auto; # CPU亲和性(Nginx 1.9+)
worker_rlimit_nofile 65535; # 每个worker能打开的最大文件数
2. 事件模型优化
events {
worker_connections 4096; # 单个worker最大连接数
use epoll; # Linux环境使用epoll
multi_accept on; # 一次性接受所有新连接
}
3. 高效传输配置
http {
sendfile on; # 启用零拷贝传输
tcp_nopush on; # 数据包累积到一定大小再发送
tcp_nodelay on; # 禁用Nagle算法
keepalive_timeout 65; # 长连接超时
keepalive_requests 1000; # 单个长连接最大请求数
}
1. 静态文件缓存
server {
location ~* \.(jpg|png|gif|css|js)$ {
expires 365d; # 缓存1年
access_log off; # 关闭日志
add_header Cache-Control "public";
}
}
2. Gzip压缩
gzip on;
gzip_comp_level 5; # 压缩级别(1-9)
gzip_min_length 256; # 最小压缩文件大小
gzip_types text/plain text/css application/json application/javascript;
1. 隐藏Nginx版本号
server_tokens off;
2. 限制HTTP方法
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}
3. 防DDoS基础配置
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
location / {
limit_req zone=req_limit burst=20 nodelay;
}
1. 负载均衡配置
upstream backend {
least_conn; # 最少连接算法
server 10.0.0.1:8080 weight=3;
server 10.0.0.2:8080;
keepalive 32; # 连接池大小
}
2. HTTP/2优化
server {
listen 443 ssl http2;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 启用OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
}
3. 动态内容缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_use_stale error timeout updating;
}
1. 状态监控页面
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.1.0/24;
deny all;
}
2. 日志优化
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" $request_time';
access_log /var/log/nginx/access.log main buffer=32k flush=1m;
问题1:502 Bad Gateway
# 增加代理超时时间
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 60;
问题2:Too many open files
# 系统级调整
ulimit -n 65535
# 在/etc/security/limits.conf添加:
* soft nofile 65535
* hard nofile 65535
ab
或wrk
进行压力测试top -H
观察worker进程CPU占用ss -s
查看TCP连接状态nginx -T
输出的完整配置根据实际业务场景,建议逐步应用这些优化配置,并通过监控工具观察效果。生产环境修改前务必做好备份和灰度测试。