Nginx 访问缓慢的原因很多,不能一概而论,需要结合日志内容、系统状态、网络情况一起分析。下面我按常见原因 → 如何看日志 → 排查思路给你一个系统性的说明。
常见几种表现:
不同表现,原因完全不同。
Nginx 默认日志格式(或你自定义的)通常包含:
$request_time
$upstream_response_time
$status
$body_bytes_sent
示例:
192.168.1.10 - - [10/Jan/2026:10:01:01 +0800] "GET /api/test HTTP/1.1" 200 1234 2.345 2.300
| 字段 | 含义 | 慢的原因指向 |
|---|---|---|
$request_time |
客户端整个请求耗时 | 网络 / Nginx / 后端 |
$upstream_response_time |
后端处理耗时 | 后端慢 |
$status |
HTTP 状态码 | 错误 / 重试 |
| 请求 URL | 哪个接口慢 | 接口问题 |
✅ 核心判断逻辑:
request_time ≈ upstream_response_time → 后端慢upstream_response_time = - → 请求没到后端(Nginx 直接返回)现象
upstream_response_time 很大可能原因
✅ 排查:
tail -f access.log | awk '{print $NF}'
现象
可能原因
✅ 排查:
ping upstream_ip
dig upstream_host
worker_processes auto;
events {
worker_connections 10240;
}
查看:
ss -ant | wc -l
top
现象
可能原因
✅ 优化:
gzip on;
gzip_types text/css application/javascript;
如果 upstream 用的是域名:
proxy_pass http://api.example.com;
Nginx 启动时解析一次,但某些情况会阻塞
✅ 建议:
resolver 8.8.8.8 valid=10s;
proxy_pass http://api.example.com;
或直接用 IP。
现象
✅ 排查:
top
htop
netstat -an | grep TIME_WAIT | wc -l
如果:
✅ 排查:
iostat -x 1
awk '{print $NF, $7}' access.log | sort -nr | head -10
(假设 $request_time 在最后一列)
awk '{sum+=$NF} END {print sum/NR}' access.log
grep " 499 " access.log
grep " 502 " access.log
grep " 504 " access.log
你可以直接按这个顺序查:
如果你愿意,可以把下面信息发我,我能直接帮你定位:
proxy_pass我可以给你精确到配置级别的优化方案。