nginx 性能优化
Nginx 性能调优:连接数、缓冲区、缓存和压缩配置
语法
各种性能相关指令
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
sendfile |
零拷贝文件传输 | sendfile on; |
常用 |
tcp_nopush |
优化数据包发送 | tcp_nopush on; |
常用 |
keepalive_timeout |
长连接超时 | keepalive_timeout 65; |
常用 |
gzip |
启用压缩 | gzip on; |
常用 |
proxy_cache |
反向代理缓存 | proxy_cache my_cache; |
进阶 |
open_file_cache |
文件描述符缓存 | open_file_cache max=1000 inactive=20s; |
进阶 |
示例
基础性能优化
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# Gzip
gzip on;
gzip_vary on;
gzip_min_length 1000;
gzip_types text/plain text/css application/json application/javascript text/xml;
}适用于大多数场景的优化配置
反向代理缓存
http {
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
}
server {
location /api/ {
proxy_cache my_cache;
proxy_cache_valid 200 10m;
proxy_cache_valid 404 1m;
proxy_pass http://backend;
}
}缓存后端响应,减少后端压力
Worker 进程优化
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
multi_accept on;
use epoll;
}高并发场景配置
常见错误
worker_connections are not enough
增加 worker_connections 值,同时确保系统 ulimit -n 足够大
技巧
- worker_processes auto 自动匹配 CPU 核数
- gzip 不要压缩图片(已经压缩过了)
- proxy_cache 可以大幅减少后端压力