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

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

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

414 Request-URI Too Large

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

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

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

可能原因

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

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

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)請求頭過大時,超過large_client_header_buffer時,
nginx可能返回"Request URI too large" (414)或者"Bad-request"(400)錯誤,

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

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

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

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

client_header_buffer_size 512k;
large_client_header_buffers 4 512k;

504 Gateway Time-out
之前網(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就可以了。

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

....
proxy_pass http://apachephp;

替換成成

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的錯誤日志,可以看到

[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,問題沒有了,網(wǎng)站可以訪問了。

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

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

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的超時時間。

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

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的話,可以使用這段代碼

$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同一端口監(jiān)聽多個域名和同時監(jiān)聽http與https

    詳解nginx同一端口監(jiān)聽多個域名和同時監(jiān)聽http與https

    這篇文章主要介紹了詳解nginx同一端口監(jiān)聽多個域名和同時監(jiān)聽http與https的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 通過nginx反向代理來調(diào)試代碼的實現(xiàn)

    通過nginx反向代理來調(diào)試代碼的實現(xiàn)

    這篇文章主要介紹了通過nginx反向代理來調(diào)試代碼的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 加速nginx性能: 開啟gzip和緩存

    加速nginx性能: 開啟gzip和緩存

    nginx 是一個高性能的 Web 服務(wù)器,之前也寫過一些關(guān)于 nginx 的文章。為了提高博客的響應(yīng)速度,可以從設(shè)置 nginx 的 gzip 和緩存這2方面入手。為字體開啟 gzip 和緩存能大大減少帶寬的消耗
    2017-03-03
  • nginx反向代理之多端口映射的實現(xiàn)

    nginx反向代理之多端口映射的實現(xiàn)

    這篇文章主要介紹了nginx反向代理之多端口映射的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 使用nginx.exe時閃退的原因和解決方法

    使用nginx.exe時閃退的原因和解決方法

    最近使用老師給的nginx.exe時,點擊nginx.exe突然屏幕就閃一下,經(jīng)過一番排查,發(fā)現(xiàn)是端口被占用所導(dǎo)致的,所以本文就給大家講講端口被占用時的解決方法詳細(xì)步驟,需要的朋友可以參考下
    2023-07-07
  • 解決nginx+uwsgi部署Django的所有問題(小結(jié))

    解決nginx+uwsgi部署Django的所有問題(小結(jié))

    本篇文章主要介紹了解決nginx+uwsgi部署Django的所有問題(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Nginx如何獲取自定義請求header頭和URL參數(shù)詳解

    Nginx如何獲取自定義請求header頭和URL參數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于Nginx如何獲取自定義請求header頭和URL參數(shù)的相關(guān)資料,本文適用于需要在nginx里獲取http請求頭信息或者傳遞的參數(shù)進(jìn)行一些計算和處理的情況,需要的朋友可以參考下
    2022-07-07
  • nginx配置后訪問出現(xiàn)白屏的問題解決

    nginx配置后訪問出現(xiàn)白屏的問題解決

    本文主要介紹了nginx配置后訪問出現(xiàn)白屏
    2024-06-06
  • Nginx為Tomcat服務(wù)器作反向代理的配置教程

    Nginx為Tomcat服務(wù)器作反向代理的配置教程

    這篇文章主要介紹了Nginx為Tomcat服務(wù)器作反向代理的配置教程,文中以Windows系統(tǒng)為環(huán)境來演示驅(qū)動JSP程序的示例,需要的朋友可以參考下
    2016-03-03
  • 一文搞懂Nginx限流(簡單實現(xiàn))

    一文搞懂Nginx限流(簡單實現(xiàn))

    這篇文章主要介紹了一文搞懂Nginx限流(簡單實現(xiàn)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05

最新評論

丰宁| 墨竹工卡县| 沂水县| 乌兰浩特市| 桃江县| 台湾省| 平利县| 尼木县| 铁力市| 甘孜| 什邡市| 杨浦区| 大理市| 桑植县| 张北县| 修武县| 焉耆| 镇巴县| 砀山县| 南宁市| 伊吾县| 集安市| 乌海市| 德州市| 泰和县| 高安市| 瑞安市| 青田县| 辉县市| 蛟河市| 滦平县| 横山县| 揭西县| 措勤县| 广宁县| 象州县| 泰兴市| 共和县| 简阳市| 湖南省| 开原市|