解決Nginx網(wǎng)關(guān)超時出現(xiàn)504 GATEWAY TIMEOUT的問題
一、背景
最近遇到一個問題504 GATEWAY TIMEOUT的問題,在瀏覽器的NetWork里面看是這個效果。時間大概是60s。
二、問題排查與解決
2.1 修改nginx配置
目前后端技術(shù)架構(gòu)主要是nginx和php-fpm,前端主要是vue框架打包發(fā)布。
于是首先想到了是nginx超時時間或者與php的超時時間設(shè)置的過段,然后配置nginx.conf設(shè)置了這些參數(shù)。
http { ... fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; proxy_connect_timeout 300; proxy_read_timeout 300; proxy_send_timeout 300; keepalive_timeout 300; ... }
nginx -s reload
2.2 修改PHP配置
然后發(fā)現(xiàn)并沒有解決問題,504 GATEWAY TIMEOUT仍然在請求60秒左右被返回。然后又想到php的配置問題,決定調(diào)整一下php的一些參數(shù)。
vim /etc/php.ini max_execution_time = 300 //設(shè)置執(zhí)行時間為300秒保存 service php-fpm restart // 然后去代碼里面設(shè)置 set_time_limit(300);
2.3 進一步調(diào)整
經(jīng)過了上面PHP的設(shè)置,發(fā)現(xiàn)也沒有什么用,該超時還是超時。針對于一般的情況來說,上面的操作一般就能解決問題了。
然后又開始懷疑是不是vue框架本身的request有一個默認的超時。
于是通過瀏覽器把請求通過curl拿出來,去命令行執(zhí)行。發(fā)現(xiàn)經(jīng)過1分鐘還是超時。
到現(xiàn)在為止實際上還是沒有解決問題。于是比較頭疼。
2.4 找到原因
接著分析原因??词欠裼蛎L問后的第一步?jīng)]有直接到服務(wù)器。
1. 在服務(wù)器上面執(zhí)行如下命令,查看機器ip,得到ip A curl ifconfig.me 2. 然后使用ping命令查看域名指向得到ip B ping 你的域名 3. 發(fā)現(xiàn)A和B不一樣,問題終于找到了,說明域名是經(jīng)過中轉(zhuǎn)才到達我們的服務(wù)器 真實的超時是在B機器上面,而不是我們自己的服務(wù)器,所以這就是為啥上面的一系列調(diào)整沒有生效的原因。 4. 馬上來測試一下。`windows + R` 輸入 `C:\WINDOWS\system32\drivers\etc` 回車,找到`hosts`文件。 5. 打開`hosts` 末尾追加`ipA 你的域名`。然后保存。這樣就讓域名直接指向了我們自己的服務(wù)器。
然后在進行請求,發(fā)現(xiàn)請求時長就可以超過60秒了。也沒有再出現(xiàn)504 GATEWAY TIMEOUT的情況。
三、網(wǎng)上其他該問題的原因
3.1 PHP 執(zhí)行時間過長
當 PHP 腳本的執(zhí)行時間超過了 Nginx 配置中設(shè)置的超時時間時,會導(dǎo)致 Gateway Timeout 錯誤。可以通過增加 fastcgi_read_timeout 配置項來延長超時時間。
3.2 后端服務(wù)錯誤
如果 PHP 后端服務(wù)發(fā)生了錯誤,并且沒有及時返回響應(yīng),那么 Nginx 就會在超時時間內(nèi)等待,然后拋出 Gateway Timeout 錯誤??梢酝ㄟ^檢查 PHP 代碼和日志來解決這個問題。
3.3 PHP-FPM 配置問題
PHP-FPM 是一種常用的 PHP FastCGI 管理器,在配置不正確的情況下可能會導(dǎo)致 Gateway Timeout 錯誤??梢酝ㄟ^檢查 PHP-FPM 配置文件(通常位于 /etc/php-fpm.conf 或 /etc/php-fpm.d/www.conf)來解決問題。
3.4 Nginx 配置問題
Nginx 的配置文件也可能會導(dǎo)致 Gateway Timeout 錯誤??梢酝ㄟ^檢查 Nginx 配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf)來解決問題。
3.5 網(wǎng)絡(luò)問題
如果 PHP 后端服務(wù)無法正常連接或響應(yīng)請求,那么也會導(dǎo)致 Gateway Timeout 錯誤??梢酝ㄟ^檢查網(wǎng)絡(luò)連接和防火墻設(shè)置來解決這個問題。
總結(jié)與思考
所以很多時候不要陷入到自己的常規(guī)思維里面去了,偶爾出去放松一下,回來或許有不一樣的視角。
以上就是解決504 GATEWAY TIMEOUT Nginx網(wǎng)關(guān)超時的問題的詳細內(nèi)容,更多關(guān)于Nginx網(wǎng)關(guān)超時的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
nginx強制使用https訪問的方法(http跳轉(zhuǎn)到https)
這篇文章主要介紹了nginx強制使用https訪問的方法(http跳轉(zhuǎn)到https),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-01-01nginx正向代理https網(wǎng)站的實現(xiàn)
Nginx正向代理,通過服務(wù)器代理客戶端去重定向請求訪問到目標服務(wù)器的一種代理服務(wù),本文主要介紹了nginx正向代理https網(wǎng)站的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-05-05