PHP的502報錯 tianyi 666的部落格

2022-09-23 06:30:17 字數 2523 閱讀 6705

相信自己,加油!

****

?nginx+php 出現502 bad gateway,一般這都不是nginx的問題,而是由於 fastcgi或者php的問題導致的

? 伺服器出現 502 的原因是連線超時 我們向伺服器傳送請求 由於伺服器當前鏈結太多,導致伺服器方面無法給於正常的響應 , 產生此類報錯

因此如果你伺服器併發量非常大,那只能先增加機器,然後按以下方式優化會取得更好效果 ; 但如果你併發不大卻出現 502 ,一般都可以歸結為配置問題,指令碼超時問題。

****

1、memory_limit? ? ? /etc/php/7.2/cli/php.ini

? ? ?如果有個別php程式程序需要占用極大記憶體時這個必須注意

2、max_children ? ? ? ? ? php-fpm.conf

? ? ?設定不合理,php-fpm 程序數不夠用,設定過小會因為沒有足夠的cgi程序處理請求,設定過

? ? ?大會出現一會兒有響應正常,一會兒等很久才有響應的情況,使用 netstat -napo |grep "php-

? ? ?fpm" | wc -l 檢視一下當前 fastcgi 程序個數,如果個數接近 conf 裡配置的上限,就需要調高

? ? ?程序數(一般情況下children 按照記憶體計算,比如說1g設定64,2g128。這個根據實際情況

? ? ?自行調整。)

3、pstreamsent too big header while reading response ?headerfrom upstream ? ?nginx日誌

? ? 檢查client head buffer,fastcgi buffer ?size是否過小

4、timeout php程式執行時間過長而超時 ? ?

? ? ?檢查nginx和fastcgi中各種timeout設定。nginx 中的 ?fastcgi_connect_timeout 300; ?

? ? ?fastcgi_send_timeout 300 ? ??fastcgi_read_timeout300 ? ? ? keepalive_timeout ;

? ? ?php-fpm中的request_terminate_timeout,php.ini中的max_execution_time

5、max_requests ? ? ?? php-fpm ?

? ??該引數指明了每個children最多處理多少個請求後便會被關閉。在大量處理請求下,如果該值

? ? 設定過小會導致 children頻繁的自殺和建立 而浪費大量時間,若所有的children差不多都在這

? ? 個時候自殺,則重建前將沒有children響應請求,於是出現502。可以將該值設定大一些或者

? ? 是0[無限]。

6、調高 linux 核心開啟檔案數量

? ? ( 必須是 root 帳號 )

? ? ?echo 'ulimit -hsn 65536'>> /etc/profile

? ? ?echo 'ulimit -hsn 65536'>> /etc/rc.local

? ? ?source /etc/profile

7、指令碼執行時間超時

? ?如果指令碼因為某種原因長時間等待不返回 ,導致新來的請求不能得到處理,調小如下配置。

? ?nginx.conf 裡面主要是如下

? ? ? ? ? ? ?fastcgi_connect_timeout 300;

? ? ? ? ? ? ?fastcgi_send_timeout 300;

? ? ? ? ? ? ?fastcgi_read_timeout 300;

? ?php-fpm.conf 裡如要是如下

? ? ? ? ? ? ?request_terminate_timeout =10s

8、快取設定較小

? ? 修改或增加配置到 nginx.conf

? ? ? ? ?proxy_buffer_size 64k;

? ? ? ? ?proxy_buffers? 512k;

? ? ? ? ?proxy_busy_buffers_size 128k;

9、recv()failed (104: connection reset by peer) while reading response header

? ? fromupstream

? ? 最重要的是程式裡要設定好超時,不要使用 php-fpm 的request_terminate_timeout ,

? ? 最好設成 request_terminate_timeout=0;

? ? 因為這個引數會直接殺掉 php 程序,然後重啟 php 程序,這樣前端 nginx 就會返回 104:

? ? ?connection reset by peer 。這個過程是很慢,總體感覺就是**很卡。

? ? 還應該注意到php.ini中的max_execution_time引數。當請求終止時,也會出現502錯誤的。

10、調整增大php 和nginx 的backlog數

? ? ?listen.backlog = 4096

php程式死迴圈導致502報錯

請求訪問返回502錯誤提示,嘗試去除可疑 段,發現程式正常,可疑 段如下圖箭頭指向 當時腦熱的以為是本地php5.5.18版本過低,不支援陣列語法 實際php 5.4 開始支援的 於是公升級為php7.0.5版本,然而發現依舊502。最後仔細觀察nginx錯誤提示,nginx慢日誌如下圖所示,發現到...

gitlab出現502報錯解決

自己在伺服器上搭建的gitlab,出現502錯誤,解決方案 嘗試 gitlab ctl restart gitlab ctl reconfigure 如果這兩個命令無效 則參考下列解決方案 常見的502錯誤,解決方案 一 首先看看配置檔案 etc gitlab gitlab.rb 中的埠號是否被占用...

Nginx 服務報錯502排查

伺服器併發量上來後部分介面報錯502,但是經檢視併發量遠沒達到伺服器極限。檢視nginx中配置檔案 usr local nginx conf vhost 中對應站點的日誌位置 data log 發現報錯誤connect to unix tmp php cgi.sock failed netstat ...