一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - Nginx - Nginx服務器中414錯誤和504錯誤的配置解決方法

Nginx服務器中414錯誤和504錯誤的配置解決方法

2019-11-06 11:51Nginx配置網 Nginx

這篇文章主要介紹了Nginx服務器中414錯誤和504錯誤的配置解決方法,分別對應Request-URI Too Large和Gateway Time-out這樣的錯誤提示,需要的朋友可以參考下

414 Request-URI Too Large

?
1
2
3
4
5
6
#客戶端請求頭緩沖區大小,如果請求頭總長度大于小于128k,則使用此緩沖區,
#請求頭總長度大于128k時使用large_client_header_buffers設置的緩存區
client_header_buffer_size 128k;
 
#large_client_header_buffers 指令參數4為個數,128k為大小,默認是8k。申請4個128k。
large_client_header_buffers 4 128k;

當http 的URI太長或者request header過大時會報414 Request URI too large或400 bad request錯誤。

可能原因

場景1.cookie中寫入的值太大造成的,因為header中的其他參數的size一般比較固定,只有cookie可能被寫入較大的數據

場景2.請求參數太長,比如發布一個文章正文,用urlencode后,使用get方式傳到后臺。

?
1
2
3
4
5
6
7
8
9
10
11
GET http://www.ythuaji.com.cn/ HTTP/1.1
Host: www.ythuaji.com.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

當請求頭過大時,超過large_client_header_buffer時,
nginx可能返回"Request URI too large" (414)或者"Bad-request"(400)錯誤,

如上例HTTP請求頭由多行構成,
其中"GET http://www.ythuaji.com.cn/ HTTP/1.1"表示Request line

當Request line的長度大于large_client_header_buffer的一個buffer(128k)時,nginx會返回"Request URI too large" (414)錯誤,對應上面的場景2。

請求投中最長的一行也要小于large_client_header_buffer,當不是Request line的最長行大于一個buffer(128k)時,會返回"Bad-request"(400)錯誤,對應上面的場景1。

解決辦法:這時可以調大上述兩個值。

?
1
2
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;

504 Gateway Time-out
之前網站一直是使用nginx做代理后端的apache運行php來提供服務。

apache經常會不定期不定時間的出現不能服務失去響應,然后nginx出現"504 Gateway Time-out"

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

也許年齡大了人就不愛折騰,愿意保持原狀不動,使用監控工具,每次收到報警后都重新啟動apache勉強維持著。

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

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


一切準備就緒后把原來的proxy_pass換成fastcgipass就可以了。

?
1
2
3
4
5
6
upstream apachephp {
  server www.quancha.cn:8080; #Apache1
}
 
....
proxy_pass http://apachephp;

替換成成

?
1
2
3
4
5
6
upstream php {
    server 127.0.0.1:9000;
}
 
...
fastcgi_pass php;

就可以把apache上跑的php遷移到php-fpm上來跑。

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

問題還是會找上門來,第二天nginx又報了504的gateway timeout。

這回沒apache什么事了吧,apache總算撇清了關系。

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

?
1
2
3
[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"超時退出了。

馬上重啟php-fpm,問題沒有了,網站可以訪問了。

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

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

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

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

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

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

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

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

set_time_limit()函數和配置指令max_execution_time只影響腳本本身執行的時間。任何發生在諸如使用system()的系統調用,流操作,數據庫操作等的腳本執行的最大時間不包括其中,當該腳本已運行。

就是說如果腳本中執行了其它操作的時間是不計在腳本運行時間當中的,如果你沒設置超時,那么php就會一直等待調用的結果。

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

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

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

當然,除了這種方法外,php-fpm里也提供參數供我們強制殺死長時間無結果的進程,只是該參數默認沒打開。

php-fpm的配置文件里可以設置一個參數request_terminate_timeout,請求終止的超時時間,當請求執行超過這個時間就會被kill。

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
$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);
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 办公室恋情在线观看 | 牛人国产偷窥女洗浴在线观看 | 久久热在线视频精品1 | 国产专区一va亚洲v天堂 | 久见久热 这里只有精品 | 男人搡女人视频免费看 | 無码一区中文字幕少妇熟女网站 | 亚洲国产精品久久无套麻豆 | 99视频有精品视频免费观看 | 欧美日韩精品一区二区三区视频播放 | 亚洲黄色图 | 精品一区视频 | 成人女人天堂午夜视频 | 精彩国产萝视频在线 | 校草让我脱了内裤给全班看 | 99久久99热久久精品免 | 狠狠干在线观看 | 给我免费观看的视频在线播放 | 日本免费观看的视频在线 | 1024国产高清精品推荐 | 果冻传媒在线完整免费观 | 日韩精品视频美在线精品视频 | 激情图片 激情小说 | free嫩白的12sex性自由 | 国产99青草全福视在线 | 1717国产精品视频免费 | 青草青草久热精品视频在线网站 | 国产v在线在线观看羞羞答答 | 大象视频污| 15一16japanese破| 草莓香蕉绿巨人丝瓜榴莲18 | 192.168.191| 国产精品一二三 | 国产卡一卡二卡三乱码手机 | 爽好紧别夹宝贝叫大声点护士 | 波多野结衣两女调教 | 日本无遮挡亲吻膜下面免费 | 苍井空av | 单亲乱l仑在线观看免费观看 | 国产一区二区三区在线 | 91视频综合网 |