程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> Nginx 502錯誤原因和解決方法總結

Nginx 502錯誤原因和解決方法總結

編輯:PHP綜合

Nginx 502錯誤原因和解決方法總結

一、NGINX 502錯誤排查
NGINX 502 Bad Gateway錯誤是FastCGI有問題,造成NGINX 502錯誤的可能性比較多。將網上找到的一些和502 Bad Gateway錯誤有關的問題和排查方法列一下,先從FastCGI配置入手:
1.FastCGI進程是否已經啟動
2.FastCGI worker進程數是否不夠
運行 netstat -anpo | grep “php-cgi” | wc -l 判斷是否接近FastCGI進程,接近配置文件中設置的數值,表明worker進程數設置太少
3.FastCGI執行時間過長
根據實際情況調高以下參數值

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;


4.FastCGI Buffer不夠
nginx和apache一樣,有前端緩沖限制,可以調整緩沖參數

fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;


5.Proxy Buffer不夠
如果你用了Proxying,調整

proxy_buffer_size   16k;
proxy_buffers    4 16k;


6.https轉發配置錯誤
正確的配置方法

server_name www.mydomain.com;
location /myproj/repos {
set $fixed_destination $http_destination;
if ( $http_destination ~* ^https(.*)$ )
{
set $fixed_destination http$1;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Destination $fixed_destination;
proxy_pass http://subversion_hosts;
}


當然,還要看你後端用的是哪種類型的FastCGI,我用過的有php-fpm,流量約為單台機器40萬PV(動態頁面), 現在基本上沒有碰到502。

7.php腳本執行時間過長
將php-fpm.conf的<value name="request_terminate_timeout">0s</value>的0s改成一個時間

二、Nginx 413錯誤的排查:修改上傳文件大小限制
在上傳時nginx返回了413錯誤,查看log文件,顯示的錯誤信息是:”413 Request Entity Too Large”, 於是在網上找了下“nginx 413錯誤”發現需要做以下設置:
在nginx.conf增加 client_max_body_size的相關設置, 這個值默認是1m,可以增加到8m以增加提高文件大小限制;
如果運行的是php,那麼還要檢查php.ini,這個大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,這樣就不會因為提交數據大小不一致出現的錯誤。
post_max_size = 8M
upload_max_filesize = 2M

三、Nginx 400錯誤排查:HTTP頭/Cookie過大
今天有人匯報nginx的HTTP400錯誤,而且這個HTTP400錯誤並不是每次都會出現的,查了一下發現nginx400錯誤是由於request header過大,通常是由於cookie中寫入了較長的字符串所引起的。
解決方法是不要在cookie裡記錄過多數據,如果實在需要的話可以考慮調整在nginx.conf中的client_header_buffer_size(默認1k)
若cookie太大,可能還需要調整large_client_header_buffers(默認4k),該參數說明如下:
請求行如果超過buffer,就會報HTTP 414錯誤(URI Too Long)
nginx接受最長的HTTP頭部大小必須比其中一個buffer大,否則就會報400的HTTP錯誤(Bad Request)。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Nginx 502 Bad Gateway的含義是請求的PHP-CGI已經執行,但是由於某種原因(一般是讀取資源的問題)沒有執行完畢而導致PHP-CGI進程終止。
Nginx 504 Gateway Time-out的含義是所請求的網關沒有請求到,簡單來說就是沒有請求到可以執行的PHP-CGI。

解決這兩個問題其實是需要綜合思考的,一般來說Nginx 502 Bad Gateway和php-fpm.conf的設置有關,而Nginx 504 Gateway Time-out則是與nginx.conf的設置有關。
而正確的設置需要考慮服務器自身的性能和訪客的數量等多重因素。
以我目前的服務器為例子CPU是奔四1.5G的,內存1GB,CENTOS的系統,訪客大概是50人左右同時在線。
但是在線的人大都需要請求PHP-CGI進行大量的信息處理,因此我將nginx.conf設置為:

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頁:
  • 上一頁
  • 1
  • 2
  • 下一頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved