Nginx 502 bad gateway錯誤解決的九種方案及原因

前言

502 Bad Gateway 是一種HTTP協議的服務器端錯誤狀態代碼,它表示作為網關或代理角色的服務器,從上遊服務器(如tomcat、php-fpm)中接收到的響應是無效的。

Gateway (網關)在計算機網絡體系中可以指代不同的設備,502 錯誤通常不是客戶端能夠修復的,而是需要由途徑的Web服務器或者代理服務器對其進行修復。

總結:php-cgi進程數不夠用、php執行時間長、或者是php-cgi進程死掉,都會出現502錯誤.

502 Bad Gateway

502系列錯誤代碼

  • HTTP Error 502 Bad Gateway HTTP 錯誤 502 網關錯誤
  • HTTP 502
  • 502 Service Temporarily Overloaded 502 服務暫時超載
  • Temporary Error (502) 臨時錯誤 (502)
  • 502 Server Error: The server encountered a temporary error and could not – – complete your request 502 服務器錯誤:服務器遇到臨時錯誤,無法完成您的請求
  • 502 Bad Gateway Nginx 502 網關壞 Nginx

502 Bad Gateway

5XX系列錯誤代碼

  • 500 Internal Server ErrorWeb 服務器遇到遇到阻止其無法完成其任務(即客戶端請求)的條件時,將顯示此錯誤
  • 501 Not Implemented 服務器無法支持或識別請求方法。 它缺少處理請求的功能,因此它會響應此錯誤
  • 502 Bad Gateway 服務器之間發生瞭錯誤,充當代理或網關時,您的服務器在嘗試處理請求時未收到上遊服務器的正確響應
  • 503 Service Unavailable 由於正在進行維護或服務器當前過載而導致服務器無法處理請求的臨時情況
  • 504 Gateway Timeout 服務器再次充當代理或網關時,沒有及時從另一個服務器(例如DNS)獲得響應,因此它無法處理請求
  • 505 HTTP Version Not Supported 當您的Web服務器不能或將不支持源自請求的HTTP協議版本時,將發生他的錯誤。 該錯誤通常包含服務器為什麼不合作的描述

Nginx 502 Bad Gateway 錯誤的原因及解決方法

多數是後端問題也就是PHP的問題, 簡單的情況可以刷新(不是一般的刷新哦,Ctrl + F5 強制刷新)解決。在php服務當中,有兩個參數非常的重要:max_requeststmax_children,具體的原因必須要查看日志才可以弄明白!

1、檢查PHP基礎設置

修改/www/server/php/80/etc/php-fpm.conf request_terminate_timeout = 100 ,把100改成5

php執行超時,修改/usr/local/php/etc/php.ini 將max_execution_time300

2、FastCGI進程是否已經啟動

ps aux | grep php

查看是否啟動瞭php-fpm服務;

3、FastCGI worker進程數是否不夠

運行linux命令:

netstat -anpo | grep “php-cgi” | wc -l

判斷是否接近FastCGI進程,接近配置文件中設置的數值,表明worker進程數設置太少;

4、FastCGI執行時間過長

PHP程序執行時間超過瞭Nginx等待時間,可以適當增加nginx.conf配置文件中FastCGItimeout時間,根據實際情況調高以下參數值:

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

5、FastCGI Buffer不夠

nginx和apache一樣,有前端緩沖限制,可以調整緩沖參數

fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;

6、FastCGI 緩沖區設置過小

首先查找nginx日志文件,目錄/var/log/nginx,在日志中發現瞭如下錯誤:

[error] 15421#0: *16 upstream sent too big header while reading response header from upstream意思是nginx緩沖區bug造成,網站頁面占用緩沖區可能過大。增加緩沖區徹底解決瞭Nginx 502 Bad Gateway,方法如下:

http {
    ...
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;
    ...
}

請根據服務器已經網站的情況自行增大上述兩個配置項。

7、代理緩沖區設置過小(使用瞭nginx反向代理的情況)

如果header過大,超出瞭默認的1k,就會引發upstream sent too big header

server {
        listen       80;
        server_name  *.test.com;
 
        location / {
 
###############添加這3行
            proxy_buffer_size 64k;
            proxy_buffers   32 32k;
            proxy_busy_buffers_size 128k;
###############添加這3行
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP       $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
............
}

8、默認php-cgi的進程數設置過少

在安裝好使用過程中出現502問題,一般是因為默認php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children的值適當增加。也有可能是max_requests的值不夠用。需要說明的是這連個配置項占用內存很大,請根據服務器配置進行設置。否則可能起到反效果。

9、其它原因

如果您上網時在您嘗試訪問的所有網站上都看這個問題,有兩種可能

①你的ISP重大設備故障/過載

②有問題的內部互聯網連接如您的防火墻無法正常運作。

在種情況下,隻有您的ISP可以幫助您。在第二種情況下,你需要解決什麼,那是阻止你進入互聯網。

如果您隻有在部分嘗試訪問的網站中出現此問題,那很可能是一個問題,即這些網站之一,其設備故障或超載。聯系你網站的管理員。

總結

到此這篇關於Nginx 502 bad gateway錯誤解決的九種方案及原因的文章就介紹到這瞭,更多相關Nginx 502 bad gateway錯誤內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: