某天突然訪問自己的測試域名,然後 404 了,然後就像無頭蒼蠅一樣,四處嘗試,看 nginx 的配置,折騰一番,無果。最後在同事的幫助下,找到了一些端倪。雖然這幾個步驟很簡單,但卻是整個解決問題的思路。
1、看 nginx 請求的 access.log
查看 nginx 配置的日誌,確認請求已經到達了 nginx。
nginx 日誌配置指令:
access_log /data/logs/nginx/api.access.log;
error_log /data/logs/nginx/api.error.log;
2、檢查域名指定的 upstream 訪問的 server 端口號是否正確
upstream my_service {
# 192.168.1.10 Nginx 服務器,8899 是 Nginx 監聽的端口號
server 192.168.1.10:8899 weight=1;
}
我的域名的 upstream 配置的是一臺 Nginx 服務器,請求都打到那臺 Nginx 服務器上,然後轉發到後端 server。有一天我訪問的時候突然就出現 404 了,我看 Nginx 服務器也是啓動得好好的,後端服務也是正常啓動的。
然後我在 Nginx服務器 上查看它監聽的端口號: netstat -anp | grep nginx
發現我域名配置的 upstream 的 server 端口號「8899」在上面這個圖中沒有,有可能是誰動了我的配置文件,最後改了域名指向的 upstream 的 server 端口號,然後 404 就消失了。
3、檢查後端服務是否可達
如果已經請求到 nginx,那就看是否請求到了後端服務,
先確認後端服務是否啓動起來,這個看後端日誌應該能發現點什麼,並通過 curl 127.0.0.1:8080
是看是否能訪問到你的服務。
每個人遇到的這個問題的原因可能不是相同的,但只要心中有一個大致的解決問題的思路方向,就不會深陷其中而無法看清問題的本質。