Nginx 核心配置
—— 性能优化、安全、反向代理与调优指南
一、基础配置
1. 工作进程与连接数
| 参数 |
作用 |
推荐值 |
示例配置 |
worker_processes |
工作进程数量(CPU核心数) |
auto 或 CPU核心数 |
worker_processes auto; |
worker_rlimit_nofile |
每个进程可打开的文件描述符上限 |
≥ worker_connections |
worker_rlimit_nofile 65535; |
worker_connections |
每个进程的最大并发连接数 |
根据内存和并发量调整(如 4096) |
worker_connections 4096; |
总并发连接数 = worker_processes × worker_connections
(例如:4核CPU × 4096 = 16,384并发)
二、性能优化
1. 网络传输
| 参数 |
作用 |
推荐值 |
示例配置 |
sendfile on |
启用零拷贝技术(提升静态文件传输) |
on |
sendfile on; |
tcp_nopush on |
数据包填满后发送(减少小包) |
on(需 sendfile) |
tcp_nopush on; |
tcp_nodelay on |
禁用Nagle算法(低延迟场景) |
on(如WebSocket) |
tcp_nodelay on; |
2. 连接管理
| 参数 |
作用 |
推荐值 |
示例配置 |
keepalive_timeout |
客户端长连接超时时间 |
60-120秒 |
keepalive_timeout 65; |
keepalive_requests |
单个长连接处理的请求数 |
100-1000 |
keepalive_requests 100; |
multi_accept on |
进程一次性接受所有新连接 |
高并发时启用 |
multi_accept on; |
3. 压缩与缓存
| 参数 |
作用 |
推荐值 |
示例配置 |
gzip on |
启用响应压缩 |
on |
gzip on; |
gzip_types |
指定压缩的文件类型 |
文本/JSON/CSS/JS |
gzip_types text/css application/json; |
open_file_cache |
缓存文件描述符(减少IO开销) |
根据文件访问频率调整 |
open_file_cache max=1000 inactive=20s; |
三、安全配置
1. 基础安全
| 参数 |
作用 |
推荐值 |
示例配置 |
server_tokens off |
隐藏Nginx版本号 |
off |
server_tokens off; |
client_max_body_size |
限制客户端请求体大小(防攻击) |
如 10m |
client_max_body_size 10m; |
2. 访问控制
location /admin {
allow 192.168.1.0/24; # 允许的IP段
deny all; # 其他全部拒绝
}
3. SSL/TLS 强化
ssl_protocols TLSv1.2 TLSv1.3; # 禁用老旧协议
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_timeout 1d; # SSL会话缓存时间
四、反向代理与负载均衡
1. Upstream 配置
upstream backend {
server 10.0.0.1:80 weight=3; # 权重3
server 10.0.0.2:80;
keepalive 32; # 后端连接池大小
}
server {
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
2. 代理缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m; # 缓存200/302响应10分钟
}
}
五、日志与监控
1. 日志格式
log_format main '$remote_addr - $request_time "$request"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn; # 错误日志级别(debug/info/warn/error)
2. 关键变量
$remote_addr:客户端IP
$request_time:请求处理时间
$status:HTTP状态码
六、完整配置示例
user www-data;
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
server_tokens off;
upstream backend {
server 10.0.0.1:80;
keepalive 32;
}
server {
listen 80;
client_max_body_size 10m;
location / {
proxy_pass http://backend;
proxy_cache my_cache;
}
}
}
七、调优建议
- 压测工具:用
ab、wrk 或 jmeter 测试并发能力。
- 系统限制:
- 检查文件描述符限制:
ulimit -n,修改 /etc/security/limits.conf。
- 监控指标:
- 活跃连接数:
netstat -anp \| grep nginx \| wc -l
- 错误日志:
tail -f /var/log/nginx/error.log
附:配置优先级
全局块 → events块 → http块 → server块 → location块