降低Nginx响应时间需聚焦连接建立、请求处理、后端转发、资源交付四环节,通过长连接复用、DNS缓存、静态资源本地服务、关闭冗余日志、优化worker配置、启用sendfile与高效缓存压缩等措施精准优化。
降低 Nginx 请求响应时间,关键不是堆参数,而是精准切中连接建立、请求处理、后端转发和资源交付这四个耗时环节。多数百毫秒级延迟,其实来自重复建连、阻塞解析、冗余日志或缓存未生效等可避免问题。
短连接是 TTFB(首字节时间)升高的主因。必须让客户端与 Nginx、Nginx 与后端都保持长连接:
http 或 server 块中设 keepalive_timeout 25;(纯 API 场景推荐 15–25 秒)upstream 块中启用连接池:keepalive 32;,并配套写入 proxy_http_version 1.1; 和 proxy_set_header Connection "";
server api.example.com;),禁用 proxy_pass http://$host 这类变量写法,否则每次请求都会触发 DNS 解析动态解析上游地址或执行复杂重写,会把毫秒级延迟变成百毫秒级:
resolver 8.8.8.8 114.114.114.114 valid=30s;,再加 resolver_timeout 3s;
location ~* .(js|css|png|woff2)$ { expires 365d; add_header Cache-Control "public"; }
access_log off;;避免全局开启 access_log 写磁盘干扰连接建立worker 进程若频繁争抢 CPU 或卡在文件 I/O,响应就会抖动:
worker_processes auto;(自动匹配物理核心数),并启用 worker_cpu_affinity auto;
worker_rlimit_nofile 200000;,同时在系统层同步调高:* soft nofile 65535、* hard nofile 65535
sendfile on;、tcp_nopush on;、open_file_cache max=1000 inactive=20s;
响应体大、重复生成、反复读磁盘——这三类问题都能被压缩+缓存组合解决:
gzip on; gzip_min_length 500; gzip_comp_level 6; gzip_types text/css application/javascript application/json;
expires 365d;;动态接口配合后端 Cache-Control: public, max-age=60 可缓存 1 分钟brotli on; brotli_comp_level 8; brotli_types text/plain application/json;(需编译 ngx_brotli 模块)