解決Nginx網(wǎng)關(guān)超時(shí)出現(xiàn)504 GATEWAY TIMEOUT的問(wèn)題
一、背景
最近遇到一個(gè)問(wèn)題504 GATEWAY TIMEOUT的問(wèn)題,在瀏覽器的NetWork里面看是這個(gè)效果。時(shí)間大概是60s。
二、問(wèn)題排查與解決
2.1 修改nginx配置
目前后端技術(shù)架構(gòu)主要是nginx和php-fpm,前端主要是vue框架打包發(fā)布。
于是首先想到了是nginx超時(shí)時(shí)間或者與php的超時(shí)時(shí)間設(shè)置的過(guò)段,然后配置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)并沒(méi)有解決問(wèn)題,504 GATEWAY TIMEOUT仍然在請(qǐng)求60秒左右被返回。然后又想到php的配置問(wèn)題,決定調(diào)整一下php的一些參數(shù)。
vim /etc/php.ini max_execution_time = 300 //設(shè)置執(zhí)行時(shí)間為300秒保存 service php-fpm restart // 然后去代碼里面設(shè)置 set_time_limit(300);
2.3 進(jìn)一步調(diào)整
經(jīng)過(guò)了上面PHP的設(shè)置,發(fā)現(xiàn)也沒(méi)有什么用,該超時(shí)還是超時(shí)。針對(duì)于一般的情況來(lái)說(shuō),上面的操作一般就能解決問(wèn)題了。
然后又開(kāi)始懷疑是不是vue框架本身的request有一個(gè)默認(rèn)的超時(shí)。
于是通過(guò)瀏覽器把請(qǐng)求通過(guò)curl拿出來(lái),去命令行執(zhí)行。發(fā)現(xiàn)經(jīng)過(guò)1分鐘還是超時(shí)。
到現(xiàn)在為止實(shí)際上還是沒(méi)有解決問(wèn)題。于是比較頭疼。
2.4 找到原因
接著分析原因??词欠裼蛎L問(wèn)后的第一步?jīng)]有直接到服務(wù)器。
1. 在服務(wù)器上面執(zhí)行如下命令,查看機(jī)器ip,得到ip A curl ifconfig.me 2. 然后使用ping命令查看域名指向得到ip B ping 你的域名 3. 發(fā)現(xiàn)A和B不一樣,問(wèn)題終于找到了,說(shuō)明域名是經(jīng)過(guò)中轉(zhuǎn)才到達(dá)我們的服務(wù)器 真實(shí)的超時(shí)是在B機(jī)器上面,而不是我們自己的服務(wù)器,所以這就是為啥上面的一系列調(diào)整沒(méi)有生效的原因。 4. 馬上來(lái)測(cè)試一下。`windows + R` 輸入 `C:\WINDOWS\system32\drivers\etc` 回車(chē),找到`hosts`文件。 5. 打開(kāi)`hosts` 末尾追加`ipA 你的域名`。然后保存。這樣就讓域名直接指向了我們自己的服務(wù)器。
然后在進(jìn)行請(qǐng)求,發(fā)現(xiàn)請(qǐng)求時(shí)長(zhǎng)就可以超過(guò)60秒了。也沒(méi)有再出現(xiàn)504 GATEWAY TIMEOUT的情況。
三、網(wǎng)上其他該問(wèn)題的原因
3.1 PHP 執(zhí)行時(shí)間過(guò)長(zhǎng)
當(dāng) PHP 腳本的執(zhí)行時(shí)間超過(guò)了 Nginx 配置中設(shè)置的超時(shí)時(shí)間時(shí),會(huì)導(dǎo)致 Gateway Timeout 錯(cuò)誤??梢酝ㄟ^(guò)增加 fastcgi_read_timeout 配置項(xiàng)來(lái)延長(zhǎng)超時(shí)時(shí)間。
3.2 后端服務(wù)錯(cuò)誤
如果 PHP 后端服務(wù)發(fā)生了錯(cuò)誤,并且沒(méi)有及時(shí)返回響應(yīng),那么 Nginx 就會(huì)在超時(shí)時(shí)間內(nèi)等待,然后拋出 Gateway Timeout 錯(cuò)誤??梢酝ㄟ^(guò)檢查 PHP 代碼和日志來(lái)解決這個(gè)問(wèn)題。
3.3 PHP-FPM 配置問(wèn)題
PHP-FPM 是一種常用的 PHP FastCGI 管理器,在配置不正確的情況下可能會(huì)導(dǎo)致 Gateway Timeout 錯(cuò)誤??梢酝ㄟ^(guò)檢查 PHP-FPM 配置文件(通常位于 /etc/php-fpm.conf 或 /etc/php-fpm.d/www.conf)來(lái)解決問(wèn)題。
3.4 Nginx 配置問(wèn)題
Nginx 的配置文件也可能會(huì)導(dǎo)致 Gateway Timeout 錯(cuò)誤??梢酝ㄟ^(guò)檢查 Nginx 配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/default.conf)來(lái)解決問(wèn)題。
3.5 網(wǎng)絡(luò)問(wèn)題
如果 PHP 后端服務(wù)無(wú)法正常連接或響應(yīng)請(qǐng)求,那么也會(huì)導(dǎo)致 Gateway Timeout 錯(cuò)誤??梢酝ㄟ^(guò)檢查網(wǎng)絡(luò)連接和防火墻設(shè)置來(lái)解決這個(gè)問(wèn)題。
總結(jié)與思考
所以很多時(shí)候不要陷入到自己的常規(guī)思維里面去了,偶爾出去放松一下,回來(lái)或許有不一樣的視角。
以上就是解決504 GATEWAY TIMEOUT Nginx網(wǎng)關(guān)超時(shí)的問(wèn)題的詳細(xì)內(nèi)容,更多關(guān)于Nginx網(wǎng)關(guān)超時(shí)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nginx反向代理多個(gè)服務(wù)器的實(shí)現(xiàn)方法
這篇文章主要介紹了Nginx反向代理多個(gè)服務(wù)器的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02nginx配置gzip壓縮優(yōu)化傳輸效率加快頁(yè)面訪問(wèn)速度的問(wèn)題
本文介紹了如何在nginx服務(wù)器中配置gzip壓縮,通過(guò)壓縮HTTP響應(yīng)內(nèi)容,減少數(shù)據(jù)傳輸大小和響應(yīng)時(shí)間,從而提升網(wǎng)站性能和訪問(wèn)速度,感興趣的朋友跟隨小編一起看看吧2024-09-09基于nginx反向代理獲取用戶(hù)真實(shí)Ip地址詳解
我們?cè)L問(wèn)互聯(lián)網(wǎng)上的服務(wù)時(shí),大多數(shù)時(shí)客戶(hù)端并不是直接訪問(wèn)到服務(wù)端的,而是客戶(hù)端首先請(qǐng)求到反向代理,反向代理再轉(zhuǎn)發(fā)到服務(wù)端實(shí)現(xiàn)服務(wù)訪問(wèn),這篇文章主要給大家介紹了關(guān)于如何基于nginx反向代理獲取用戶(hù)真實(shí)Ip地址的相關(guān)資料,需要的朋友可以參考下2022-03-03訪問(wèn)nginx顯示未找到站點(diǎn)的問(wèn)題分析及解決方案
當(dāng)我們?cè)诎惭b好nginx準(zhǔn)備訪問(wèn)80端口時(shí),突然出現(xiàn)您的請(qǐng)求在Web服務(wù)器中沒(méi)有找到對(duì)應(yīng)的站點(diǎn),所以本文給大家介紹了訪問(wèn)nginx顯示未找到站點(diǎn)的問(wèn)題分析及解決方案,需要的朋友可以參考下2024-03-03Nginx部署Vue項(xiàng)目添加訪問(wèn)后綴方式
文章介紹了如何根據(jù)需要為Vue項(xiàng)目配置不同的訪問(wèn)路徑,并通過(guò)Nginx進(jìn)行相應(yīng)的配置,通過(guò)設(shè)置`vue.config.js`中的`publicPath`和`route`的`base`為`/app`,并將打包后的文件放入指定目錄,然后在Nginx配置中使用`alias`和`try_files`指令來(lái)處理路徑2025-01-01windows下nginx+tomcat配置負(fù)載均衡的方法
這篇文章主要介紹了windows下nginx+tomcat配置負(fù)載均衡的方法,需要的朋友可以參考下2016-09-09詳解Nginx靜態(tài)服務(wù)配置(root和alias指令)
這篇文章主要介紹了詳解Nginx靜態(tài)服務(wù)配置(root和alias指令),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01nginx支持codeigniter的pathinfo模式url重寫(xiě)配置寫(xiě)法示例
這篇文章主要介紹了nginx支持codeigniter的pathinfo模式url重寫(xiě)配置寫(xiě)法示例,pathinfo模式是一種開(kāi)發(fā)框架都愛(ài)用的路由模式,需要的朋友可以參考下2014-07-07