欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx服務(wù)器中414錯(cuò)誤和504錯(cuò)誤的配置解決方法

 更新時(shí)間:2015年12月30日 17:36:02   作者:mood  
這篇文章主要介紹了Nginx服務(wù)器中414錯(cuò)誤和504錯(cuò)誤的配置解決方法,分別對(duì)應(yīng)Request-URI Too Large和Gateway Time-out這樣的錯(cuò)誤提示,需要的朋友可以參考下

414 Request-URI Too Large

#客戶端請(qǐng)求頭緩沖區(qū)大小,如果請(qǐng)求頭總長度大于小于128k,則使用此緩沖區(qū),
#請(qǐng)求頭總長度大于128k時(shí)使用large_client_header_buffers設(shè)置的緩存區(qū)
client_header_buffer_size 128k;

#large_client_header_buffers 指令參數(shù)4為個(gè)數(shù),128k為大小,默認(rèn)是8k。申請(qǐng)4個(gè)128k。
large_client_header_buffers 4 128k;

當(dāng)http 的URI太長或者request header過大時(shí)會(huì)報(bào)414 Request URI too large或400 bad request錯(cuò)誤。

可能原因

場(chǎng)景1.cookie中寫入的值太大造成的,因?yàn)閔eader中的其他參數(shù)的size一般比較固定,只有cookie可能被寫入較大的數(shù)據(jù)

場(chǎng)景2.請(qǐng)求參數(shù)太長,比如發(fā)布一個(gè)文章正文,用urlencode后,使用get方式傳到后臺(tái)。

GET http://www.264.cn/ HTTP/1.1
Host: www.264.cn
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: bdshare_firstime=1363517175366; 
If-Modified-Since: Mon, 13 May 2013 13:40:02 GMT

當(dāng)請(qǐng)求頭過大時(shí),超過large_client_header_buffer時(shí),
nginx可能返回"Request URI too large" (414)或者"Bad-request"(400)錯(cuò)誤,

如上例HTTP請(qǐng)求頭由多行構(gòu)成,
其中"GET http://www.264.cn/ HTTP/1.1"表示Request line

當(dāng)Request line的長度大于large_client_header_buffer的一個(gè)buffer(128k)時(shí),nginx會(huì)返回"Request URI too large" (414)錯(cuò)誤,對(duì)應(yīng)上面的場(chǎng)景2。

請(qǐng)求投中最長的一行也要小于large_client_header_buffer,當(dāng)不是Request line的最長行大于一個(gè)buffer(128k)時(shí),會(huì)返回"Bad-request"(400)錯(cuò)誤,對(duì)應(yīng)上面的場(chǎng)景1。

解決辦法:這時(shí)可以調(diào)大上述兩個(gè)值。

client_header_buffer_size 512k;
large_client_header_buffers 4 512k;

504 Gateway Time-out
之前網(wǎng)站一直是使用nginx做代理后端的apache運(yùn)行php來提供服務(wù)。

apache經(jīng)常會(huì)不定期不定時(shí)間的出現(xiàn)不能服務(wù)失去響應(yīng),然后nginx出現(xiàn)"504 Gateway Time-out"

查看錯(cuò)誤日志也看不到任何東西,以為是apache的bug(其實(shí)不是,下面會(huì)說原因)。

也許年齡大了人就不愛折騰,愿意保持原狀不動(dòng),使用監(jiān)控工具,每次收到報(bào)警后都重新啟動(dòng)apache勉強(qiáng)維持著。

終于有一天我煩了,不就是處理php嗎,我不用apache總行了吧,一怒之下使用源安裝php-fpm轉(zhuǎn)移到php-fpm來運(yùn)行php。

安裝php并不麻煩,使用源安裝還是很順利的,唯一需要做的就是設(shè)置php worker工作進(jìn)程的日志輸出php錯(cuò)誤日志。


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

upstream apachephp {
  server www.quancha.cn:8080; #Apache1
}

....
proxy_pass http://apachephp;

替換成成

upstream php {
    server 127.0.0.1:9000;
}

...
fastcgi_pass php;

就可以把a(bǔ)pache上跑的php遷移到php-fpm上來跑。

原以為這樣就可以高枕無憂了,遷移完成是也確實(shí)沒什么問題,但是如果你不去分析問題的根本原因在哪。

問題還是會(huì)找上門來,第二天nginx又報(bào)了504的gateway timeout。

這回沒apache什么事了吧,apache總算撇清了關(guān)系。

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

[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.quancha.cn"

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

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

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

問題就縮小到這個(gè)php腳本上了。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

命令行運(yùn)行php的話,可以使用這段代碼

$real_execution_time_limit = 60; //時(shí)間限制

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搭建簡(jiǎn)單的文件下載服務(wù)器的方法

    用nginx搭建簡(jiǎn)單的文件下載服務(wù)器的方法

    本篇文章主要介紹了用nginx搭建簡(jiǎn)單的文件下載服務(wù)器的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • 詳解Nginx中的geo模塊與利用其配置負(fù)載均衡的示例

    詳解Nginx中的geo模塊與利用其配置負(fù)載均衡的示例

    這篇文章主要介紹了詳解Nginx中的geo模塊與利用其配置負(fù)載均衡的示例,文中對(duì)模塊的geo指令使用有比較詳細(xì)的介紹,需要的朋友可以參考下
    2016-01-01
  • nginx日志切割/分割之按天生成及定期刪除日志

    nginx日志切割/分割之按天生成及定期刪除日志

    這篇文章主要給大家介紹了關(guān)于nginx日志切割/分割之按天生成及定期刪除日志的相關(guān)資料,日志文件大會(huì)影響訪問的速度和查找難度,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-08-08
  • Nginx禁止國外IP訪問我的網(wǎng)站的實(shí)現(xiàn)

    Nginx禁止國外IP訪問我的網(wǎng)站的實(shí)現(xiàn)

    本文主要介紹了Nginx禁止國外IP訪問我的網(wǎng)站的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • nginx反向代理proxy_pass遇到的死循環(huán)問題

    nginx反向代理proxy_pass遇到的死循環(huán)問題

    這篇文章主要介紹了nginx反向代理proxy_pass遇到的死循環(huán)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Nginx+Keepalived實(shí)現(xiàn)雙機(jī)主備的方法

    Nginx+Keepalived實(shí)現(xiàn)雙機(jī)主備的方法

    這篇文章主要介紹了Nginx+Keepalived實(shí)現(xiàn)雙機(jī)主備的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • nginx實(shí)現(xiàn)發(fā)布靜態(tài)資源的方法

    nginx實(shí)現(xiàn)發(fā)布靜態(tài)資源的方法

    這篇文章主要介紹了nginx實(shí)現(xiàn)發(fā)布靜態(tài)資源的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • CentOS6使用nginx搭建web網(wǎng)站服務(wù)的方法

    CentOS6使用nginx搭建web網(wǎng)站服務(wù)的方法

    這篇文章主要介紹了CentOS6使用nginx搭建web網(wǎng)站服務(wù)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • nginx 負(fù)載均衡的三種參數(shù)設(shè)置

    nginx 負(fù)載均衡的三種參數(shù)設(shè)置

    這篇文章主要介紹了nginx 負(fù)載均衡的三種參數(shù)設(shè)置,需要的朋友可以參考下
    2017-07-07
  • Nginx反向代理入門實(shí)戰(zhàn)指南

    Nginx反向代理入門實(shí)戰(zhàn)指南

    反向代理:反向代理也叫reverse proxy,指的是代理外網(wǎng)用戶的請(qǐng)求到內(nèi)部的指定web服務(wù)器,并將數(shù)據(jù)返回給用戶的一種方式,這是用的比較多的一種方式,下面這篇文章主要給大家介紹了關(guān)于Nginx反向代理的相關(guān)資料,需要的朋友可以參考下
    2021-08-08

最新評(píng)論