nginx http代理性能优化需从四方面入手:1. 合理配置worker进程与连接数;2. 启用客户端及上游长连接;3. 配置高效缓存减少后端压力;4. 开启gzip压缩与sendfile零拷贝传输。

Nginx 作为 HTTP 代理时,不只是简单转发请求,而是可通过一系列配置干预请求路径、资源复用和数据流转方式,直接提升整个系统的吞吐量与响应效率。关键不在于“代理”本身,而在于如何让代理过程更轻、更快、更智能。
合理分配工作进程与连接资源
Nginx 的并发能力由 worker_processes 和 worker_connections 共同决定。若代理流量大但进程数仍为默认的 1,CPU 多核就处于闲置状态;同样,若每个 worker 只允许 1024 连接,高并发下会快速触发 “too many open files” 错误。- 将
worker_processes设为auto,自动匹配 CPU 核心数 - 在
events块中把worker_connections提升至 10240 或更高(需同步调整系统级文件描述符限制) - 添加
worker_rlimit_nofile 65535,避免内核限制成为瓶颈 - 启用
use epoll(Linux)和multi_accept on,使单次事件循环尽可能接纳更多新连接
启用长连接与上游 Keepalive 池
HTTP 代理若每次请求都新建 TCP 连接到后端,握手+慢启动开销极大。开启两级 keepalive(客户端到 Nginx、Nginx 到 upstream)能显著降低延迟。- 设置
keepalive_timeout 65; keepalive_requests 1000;控制客户端连接复用 - 在
upstream块中定义连接池:upstream backend { server 10.0.1.10:8080; keepalive 32; # 每个 worker 与后端保持最多 32 个空闲长连接 } - 代理 location 中显式启用:
proxy_http_version 1.1; proxy_set_header Connection '';
启用高效缓存减少后端压力
对可缓存的响应(如 API 结果、静态资源、HTML 页面),Nginx 代理层缓存能拦截大量重复请求,避免穿透到后端服务。- 定义缓存区:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:50m max_size=2g inactive=30m use_temp_path=off;
- 在 location 中启用并设置缓存策略:
proxy_cache my_cache; proxy_cache_valid 200 302 10m; # 成功响应缓存 10 分钟 proxy_cache_valid 404 1m; # 404 缓存 1 分钟防刷 proxy_cache_use_stale error timeout updating; # 异常时可用旧缓存
启用 Gzip 与 sendfile 加速传输
压缩响应体、零拷贝发送静态内容,能同时降低带宽占用与内核态/用户态切换开销。- 开启 Gzip(注意避免压缩已压缩资源如图片):
gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml;
- 对静态文件启用
sendfile与tcp_nopush:location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { sendfile on; tcp_nopush on; tcp_nodelay off; expires 1y; add_header Cache-Control "public, immutable"; }
不复杂但容易忽略











