今天分享一個(gè)我踩到的“低級(jí)但致命”的性能坑:
Nginx 代理后接口響應(yīng)從毫秒級(jí)變成 5 秒以上,而直接訪問(wèn)后端卻很快!
查文檔 各種調(diào)優(yōu)參數(shù)都試了個(gè)遍,結(jié)果真相讓我哭笑不得——竟然是因?yàn)?Nginx 的 server_name
配了 IP,但沒(méi)配 Hosts 解析!
不信?一起來(lái)看完整排查過(guò)程??
?? 問(wèn)題現(xiàn)象
- 項(xiàng)目:Java Spring Boot 應(yīng)用
- 部署方式:Nginx 反向代理,后端服務(wù)監(jiān)聽
127.0.0.1:8088
:通過(guò) Nginx 訪問(wèn)接口,平均響應(yīng)時(shí)間 5~6 秒!:直接訪問(wèn) http://127.0.0.1:8088/api/user
,響應(yīng)時(shí)間 < 50ms!
后端沒(méi)問(wèn)題,網(wǎng)絡(luò)通,服務(wù)正常,那慢在哪?
排查思路:
第一步:排除后端
- 使用
curl
直接請(qǐng)求本地服務(wù):
curl -w "TCP: %{time_connect}s, 耗時(shí): %{time_total}s\n" \
-o /dev/null -s \
http:
結(jié)果:總耗時(shí) 0.03s,排除后端到問(wèn)題。
第二步:檢查 Nginx 配置(常規(guī)操作)
網(wǎng)上常見的“優(yōu)化建議”我都試了:全都無(wú)效!??
| | |
---|
proxy_buffering off | |
|
proxy_http_version 1.1 | |
|
keepalive_timeout | |
|
resolver | |
|
| |
|
第三步:抓包分析
F12開發(fā)模式查看請(qǐng)求時(shí)間線:

推測(cè)問(wèn)題出在nginx響應(yīng)階段, Nginx 接收到請(qǐng)求后,并沒(méi)有立即轉(zhuǎn)發(fā)給后端只能這么推測(cè), 因?yàn)橐呀?jīng)排除后端了只能是nginx的問(wèn)題
用 tcpdump
抓包:
tcpdump -i any -nn port 80
tcpdump -i any -nn port 8088
發(fā)現(xiàn):Nginx 接收請(qǐng)求后,約 5 秒127.0.0.1:8088 才接受到請(qǐng)求猜測(cè)會(huì)不會(huì)是ip地址反向解析造成的,抱著試試看的心態(tài)搞一下試試
server_name
是 IP,莫非會(huì)觸發(fā)反向解析?
由于我的服務(wù)器nginx server_name:配置的是IP地址, 了解到 nginx中也會(huì)走一遍host做反向解析, 推斷出是反向解析導(dǎo)致的
?
給本機(jī) IP 加 Hosts 解析
編輯 /etc/hosts
:
# 添加本機(jī) IP 映射
192.168.1.100 localhost test-server
?? 替換 192.168.1.100
為你的服務(wù)器實(shí)際 IP。
然后重啟 Nginx 或重載配置:
驗(yàn)證
再次訪問(wèn)接口:效果杠杠滴
- 響應(yīng)時(shí)間從 5.12s → 0.02s!
? 問(wèn)題解決!
? 最佳實(shí)踐建議
生產(chǎn)環(huán)境建議使用域名
若用 IP,務(wù)必配 Hosts:
閱讀原文:原文鏈接
該文章在 2025/8/15 12:11:41 編輯過(guò)