首頁 > 軟體

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

2022-08-09 18:02:34

前言

502 Bad Gateway 是一種HTTP協定的伺服器端錯誤狀態程式碼,它表示作為閘道器或代理角色的伺服器,從上游伺服器(如tomcat、php-fpm)中接收到的響應是無效的。

Gateway (閘道器)在計算機網路體系中可以指代不同的裝置,502 錯誤通常不是使用者端能夠修復的,而是需要由途徑的Web伺服器或者代理伺服器對其進行修復。

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

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

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錯誤內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com