最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一次nginx 504 Gateway Time-out錯誤排查、解決記錄

 更新時間:2014年05月26日 10:40:23   作者:  
這篇文章主要介紹了一次nginx 504 Gateway Time-out錯誤排查、解決記錄,經(jīng)過反復(fù)檢查,發(fā)現(xiàn)造成這個問題的原因就是PHP的CURL沒有設(shè)置超時時間,解決辦法只要設(shè)置超時時間或者修改一下nginx的配置即可解決,需要的朋友可以參考下

記一次莫名其妙的網(wǎng)站失去響應(yīng)排查。之前網(wǎng)站一直是使用nginx做代理后端的apache運行php來提供服務(wù)。apache經(jīng)常會不定期不定時間的出現(xiàn)不能服務(wù)失去響應(yīng),然后nginx出現(xiàn)"504 Gateway Time-out"
查看錯誤日志也看不到任何東西,以為是apache的bug(其實不是,下面會說原因)。

也許年齡大了人就不愛折騰,愿意保持原狀不動,使用監(jiān)控工具,每次收到報警后都重新啟動apache勉強維持著。終于有一天我煩了,不就是處理php嗎,我不用apache總行了吧,一怒之下使用源安裝php-fpm轉(zhuǎn)移到php-fpm來運行php。安裝php并不麻煩,使用源安裝還是很順利的,唯一需要做的就是設(shè)置php worker工作進(jìn)程的日志輸出php錯誤日志。


一切準(zhǔn)備就緒后把原來的proxy_pass換成fastcgipass就可以了。

復(fù)制代碼 代碼如下:

upstream apachephp  {
    server www.fzitv.net:8080; #Apache1
}

....
proxy_pass  http://apachephp;


替換成成
復(fù)制代碼 代碼如下:

upstream php {
        server 127.0.0.1:9000;
}

...
fastcgi_pass php;


就可以把apache上跑的php遷移到php-fpm上來跑。
原以為這樣就可以高枕無憂了,遷移完成是也確實沒什么問題,但是如果你不去分析問題的根本原因在哪。問題還是會找上門來,第二天nginx又報了504的gateway timeout。這回沒apache什么事了吧,apache總算撇清了關(guān)系。

那應(yīng)該還是在nginx和php-fpm身上,查看nginx的錯誤日志,可以看到

復(fù)制代碼 代碼如下:

[error] 6695#0: *168438 upstream timed out (110: Connection timed out) while reading response header from upstream,
...
request: "GET /kd/open.php?company=chinapost&number=PA24977020344 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.fzitv.net"

看到這里基本上就排除了nginx嫌疑,nginx是在等待php處理"GET /kd/open.php?company=chinapost&number=PA24977020344 HTTP/1.1"超時退出了。

馬上重啟php-fpm,問題沒有了,網(wǎng)站可以訪問了。

再次訪問該頁面,依然沒有響應(yīng),但同時訪問別的頁面正常,該頁面刷新幾次后,整個網(wǎng)站都是bad gateway timeout了。

問題就縮小到這個php腳本上了。

復(fù)制代碼 代碼如下:

netstat -napo |grep "php5-fpm" | wc -l

查看php工作進(jìn)程已經(jīng)達(dá)到了配置文件里的上限10,有種感覺就是大家都被open.php這個腳本卡住了。

這個腳本是干什么的呢?這個腳本就是采集快遞信息的,里面用到了php_curl。

PHP腳本如果執(zhí)行時間超過php.ini中的配置項max_execution_time不出結(jié)果就會強制退出。

查看了php.ini中max_execution_time確實配了,值為30。

萬能google派上用場了,經(jīng)過不斷google后得到下面這句話

set_time_limit()函數(shù)和配置指令max_execution_time只影響腳本本身執(zhí)行的時間。任何發(fā)生在諸如使用system()的系統(tǒng)調(diào)用,流操作,數(shù)據(jù)庫操作等的腳本執(zhí)行的最大時間不包括其中,當(dāng)該腳本已運行。

就是說如果腳本中執(zhí)行了其它操作的時間是不計在腳本運行時間當(dāng)中的,如果你沒設(shè)置超時,那么php就會一直等待調(diào)用的結(jié)果。

查看open.php源文件一看,果然沒有設(shè)置curl的超時時間。

增加如下兩行,重新刷新,后問題解決了。

復(fù)制代碼 代碼如下:

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); //timeout on connect
curl_setopt($ch, CURLOPT_TIMEOUT, 10); //timeout on response

當(dāng)然,除了這種方法外,php-fpm里也提供參數(shù)供我們強制殺死長時間無結(jié)果的進(jìn)程,只是該參數(shù)默認(rèn)沒打開。

php-fpm的配置文件里可以設(shè)置一個參數(shù)request_terminate_timeout,請求終止的超時時間,當(dāng)請求執(zhí)行超過這個時間就會被kill。

同時它還有個參數(shù)request_slowlog_timeout,用來記錄慢請求日志的。

命令行運行php的話,可以使用這段代碼

復(fù)制代碼 代碼如下:

$real_execution_time_limit = 60; //時間限制

if (pcntl_fork())
{
// some long time code which should be
// terminated after $real_execution_time_limit seconds passed if it's not
// finished by that time
}
else
{
sleep($real_execution_time_limit);
posix_kill(posix_getppid(), SIGKILL);
}

相關(guān)文章

  • Nginx location匹配模式與規(guī)則詳解

    Nginx location匹配模式與規(guī)則詳解

    這篇文章主要介紹了Nginx location匹配模式與規(guī)則,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Nginx中root和alias指令的使用與區(qū)別

    Nginx中root和alias指令的使用與區(qū)別

    root和alias是兩個重要但經(jīng)常令人混淆的指令,尤其用于指定資源在服務(wù)器文件系統(tǒng)中的位置,本文就來介紹一下兩個指令的使用與區(qū)別,感興趣的可以了解一下
    2024-08-08
  • CentOS 6.3安裝配置Nginx方法

    CentOS 6.3安裝配置Nginx方法

    這篇文章主要介紹了CentOS 6.3安裝配置Nginx方法,需要的朋友可以參考下
    2014-11-11
  • Nginx負(fù)載均衡/SSL配置的實現(xiàn)

    Nginx負(fù)載均衡/SSL配置的實現(xiàn)

    這篇文章主要介紹了Nginx負(fù)載均衡/SSL配置的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • nginx配置ssl雙向驗證的方法

    nginx配置ssl雙向驗證的方法

    這篇文章主要介紹了nginx配置ssl雙向驗證的方法,需要的朋友可以參考下
    2014-11-11
  • 如何讓你的Nginx支持分布式追蹤詳解

    如何讓你的Nginx支持分布式追蹤詳解

    分布式追蹤系統(tǒng)(Tracing)旨在分析請求背后調(diào)用了哪些服務(wù),服務(wù)的調(diào)用順序、耗時、錯誤原因等,下面這篇文章主要給大家介紹了關(guān)于如何讓你的Nginx支持分布式追蹤的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Nginx服務(wù)器屏蔽與禁止屏蔽網(wǎng)絡(luò)爬蟲的方法

    Nginx服務(wù)器屏蔽與禁止屏蔽網(wǎng)絡(luò)爬蟲的方法

    今天小編就為大家分享一篇關(guān)于Nginx服務(wù)器屏蔽與禁止屏蔽網(wǎng)絡(luò)爬蟲的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Nginx正則表達(dá)式相關(guān)的參數(shù)和規(guī)則介紹

    Nginx正則表達(dá)式相關(guān)的參數(shù)和規(guī)則介紹

    這篇文章主要給大家介紹了關(guān)于Nginx正則表達(dá)式相關(guān)的參數(shù)和規(guī)則的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Nginx正則表達(dá)式具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • nginx使用stream模塊代理端口的實現(xiàn)

    nginx使用stream模塊代理端口的實現(xiàn)

    本文主要介紹了nginx使用stream模塊代理端口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • 分享nginx+php-fpm實現(xiàn)大文件下載排坑的過程

    分享nginx+php-fpm實現(xiàn)大文件下載排坑的過程

    這篇文章主要介紹了nginx+php-fpm實現(xiàn)大文件下載排坑的過程,文中通過代碼實例相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定得參考借鑒價值,需要的朋友參考下吧
    2018-08-08

最新評論

江津市| 宁夏| 军事| 开鲁县| 新蔡县| 娄烦县| 依安县| 都昌县| 平乐县| 彝良县| 芮城县| 冷水江市| 包头市| 深圳市| 黄山市| 分宜县| 闻喜县| 宣武区| 武山县| 金秀| 娄烦县| 马龙县| 广丰县| 舞钢市| 凤山市| 靖安县| 塘沽区| 古蔺县| 乐亭县| 宝山区| 栾城县| 苏尼特左旗| 宁明县| 通河县| 怀化市| 阿瓦提县| 贡嘎县| 论坛| 乌拉特前旗| 博湖县| 绥中县|