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

推測問題出在nginx響應(yīng)階段, Nginx 接收到請求后,并沒有立即轉(zhuǎn)發(fā)給后端只能這么推測, 因?yàn)橐呀?jīng)排除后端了只能是nginx的問題
用 tcpdump
抓包:
tcpdump -i any -nn port 80
tcpdump -i any -nn port 8088
發(fā)現(xiàn):Nginx 接收請求后,約 5 秒127.0.0.1:8088 才接受到請求猜測會不會是ip地址反向解析造成的,抱著試試看的心態(tài)搞一下試試
server_name
是 IP,莫非會觸發(fā)反向解析?
由于我的服務(wù)器nginx server_name:配置的是IP地址, 了解到 nginx中也會走一遍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)證
再次訪問接口:效果杠杠滴
- 響應(yīng)時間從 5.12s → 0.02s!
? 問題解決!
? 最佳實(shí)踐建議
生產(chǎn)環(huán)境建議使用域名
若用 IP,務(wù)必配 Hosts:
閱讀原文:原文鏈接
該文章在 2025/8/15 12:11:41 編輯過