西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴(lài)的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)西西教程Linux → Nginx 504 Gateway time-out錯(cuò)誤完美解決方案

Nginx 504 Gateway time-out錯(cuò)誤完美解決方案

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2015/1/27 13:49:13字體大小:A-A+

作者:西西點(diǎn)擊:2512次評(píng)論:0次標(biāo)簽: Nginx

  • 類(lèi)型:站長(zhǎng)工具大。535KB語(yǔ)言:中文 評(píng)分:10.0
  • 標(biāo)簽:
立即下載

在安裝完Nginx+PHP-fpm+Mysql后,跑PHP的應(yīng)用會(huì)經(jīng)常出現(xiàn)504 Gateway Time-out 或者502 Bad Gateway的情況。

Nginx 504 Gateway Time-out 的含義是所請(qǐng)求的網(wǎng)關(guān)沒(méi)有請(qǐng)求到,簡(jiǎn)單來(lái)說(shuō)就是沒(méi)有請(qǐng)求到可以執(zhí)行的 PHP-CGI。這種情況可能是由于 nginx 默認(rèn)的 fastcgi 進(jìn)程響應(yīng)的緩沖區(qū)太小造成的, 這將導(dǎo)致 fastcgi 進(jìn)程被掛起, 如果你的 fastcgi 服務(wù)對(duì)這個(gè)掛起處理的不好, 那么最后就極有可能導(dǎo)致 504 Gateway Time-out。

Nginx 504 Gateway time-out錯(cuò)誤.jpg

一般看來(lái), 這種情況可能是由于nginx默認(rèn)的fastcgi進(jìn)程響應(yīng)的緩沖區(qū)太小造成的, 這將導(dǎo)致fastcgi進(jìn)程被掛起, 如果你的fastcgi服務(wù)對(duì)這個(gè)掛起處理的不好, 那么最后就極有可能導(dǎo)致504 Gateway Time-out
現(xiàn)在的網(wǎng)站, 尤其某些論壇有大量的回復(fù)和很多內(nèi)容的, 一個(gè)頁(yè)面甚至有幾百K
默認(rèn)的fastcgi進(jìn)程響應(yīng)的緩沖區(qū)是8K, 我們可以設(shè)置大點(diǎn)

在nginx.conf里, 加入:

fastcgi_buffers 8 128k

這表示設(shè)置fastcgi緩沖區(qū)為8×128k
當(dāng)然如果您在進(jìn)行某一項(xiàng)即時(shí)的操作, 可能需要nginx的超時(shí)參數(shù)調(diào)大點(diǎn), 例如設(shè)置成60秒:

send_timeout 60;

我只是調(diào)整了這兩個(gè)參數(shù), 結(jié)果就是沒(méi)有再顯示那個(gè)超時(shí), 可以說(shuō)效果不錯(cuò)

這個(gè)問(wèn)題耽誤了我差不多4個(gè)小時(shí)的時(shí)間,網(wǎng)上有很多前輩們的解決方法,在這里記錄下解決這個(gè)問(wèn)題的思路。首先這個(gè)問(wèn)題主要是因?yàn)镻HP的Script執(zhí)行時(shí)間太長(zhǎng)了,已經(jīng)超過(guò)nginx能接受的底線

在nginx的日志中會(huì)看到這樣的log

2012/08/11 13:39:45 [error] 30788#0: *1 upstream timed out (110: Connection timed out)

while reading response header from upstream, client: 127.0.0.1, server: www.innovatechautomation.com

request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.innovatechautomation.com

在php-fpm的日志中會(huì)發(fā)現(xiàn)這樣的log

2012/08/11 13:39:45 [error] 30788#0: *1 upstream timed out (110: Connection timed out)

while reading response header from upstream, client: 127.0.0.1, server: www.innovatechautomation.com

request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.innovatechautomation.com"

一般來(lái)說(shuō),出現(xiàn)這樣的情況是因?yàn)镹ginx會(huì)從php-fpm的9000端口讀取fastcgi的執(zhí)行結(jié)果,等來(lái)N久都不見(jiàn)回復(fù),所以就報(bào)504了。解決辦法很簡(jiǎn)單,修改php的最長(zhǎng)執(zhí)行時(shí)間

; Maximum execution time of each script, in seconds; http://php.net/max-execution-time; 

Note: This directive is hardcoded to 0 for the CLI SAPI;

fix by Matt 2012.8.11

;max_execution_time = 3000

在這里我注釋掉php.ini參數(shù)的時(shí)間限制。還有php-fpm里的

;request_terminate_timeout = 0

這個(gè)參數(shù)會(huì)在php.ini中max_execution_time因?yàn)槟承┰虿荒苷9ぷ鞑艜?huì)生效。

之前設(shè)置的是300s,安裝Magento的時(shí)候就一直就報(bào)504。后來(lái)索性修改到3000了。在Nginx的配置文件添加

#add by Matt 2012.8.11

fastcgi_read_timeout 3000;

fastcgi_connect_timeout 3000;

fastcgi_send_timeout 3000;

Magento你到底安裝多少sql文件?

PS:有時(shí)候緩存過(guò)小也會(huì)引起504,具體情況還需要根據(jù)Nginx的日志內(nèi)容來(lái)分析。修改fastcgi的緩存大。

fastcgi_buffers 2 256k;

fastcgi_buffer_size 128k;

fastcgi_busy_buffers_size 256k;

fastcgi_temp_file_write_size 256k;

VPS出現(xiàn)Nginx 504 Gateway time-out錯(cuò)誤

西西 只對(duì) Nginx.conf 和 php-fpm.conf 兩個(gè)配置文件做了一些修改,觀察一段時(shí)間,看看效果。

1.將 Nginx.conf 配置文件中相應(yīng)參數(shù)設(shè)置為如下:

命令:vi /usr/local/nginx/conf/nginx.conf (lnmp.org出品的lnmp一鍵安裝包路徑,其它請(qǐng)自行找目錄)

fastcgi_connect_timeout 300s; 

fastcgi_send_timeout 300s; 

fastcgi_read_timeout 300s; 

fastcgi_buffer_size 128k; 

fastcgi_buffers 8 128k;#8 128 

fastcgi_busy_buffers_size 256k; 

fastcgi_temp_file_write_size 256k; 

fastcgi_intercept_errors on;

2.將 php-fpm.conf 配置文件中相應(yīng)參數(shù)設(shè)置為如下值:

命令:vi /usr/local/php/etc/php-fpm.conf (lnmp.org出品的lnmp一鍵安裝包路徑,其它請(qǐng)自行找目錄)

<value name="max_children">9</value>(西西 購(gòu)買(mǎi)的vps內(nèi)存較小所以不能設(shè)置太大,應(yīng)根據(jù)你的內(nèi)存來(lái)設(shè)置) 

<value name="request_terminate_timeout">600s</value>(根據(jù)具體情況設(shè)置,詳請(qǐng)查閱參考文章) 

<value name=”style”>apache-like </value>(php-fpm的默認(rèn)靜態(tài)處理方式會(huì)使得php-cgi的進(jìn)程長(zhǎng)期占用內(nèi)存而無(wú)法釋放,這也是導(dǎo)致nginx出錯(cuò)的原因之一,因此可以將php-fpm的處理方式改成apache模式。)

對(duì) Linux  西西 也是菜鳥(niǎo),只好照著別人的方法來(lái)設(shè)置了,等一段時(shí)間,沒(méi)什么問(wèn)題了,這個(gè)方法應(yīng)該就是一個(gè)很有效的方法了。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)