目前碰到一個很神奇的nginx 502 Bad Geteway錯誤問題。
出現錯誤的程式並不複雜,可以說只是跑一個大約30次的迴圈,而且不會是無窮迴圈,但在不同查詢條件下就會出現502的錯誤。
但為這在我測試電腦(apache)同一支程式,同樣條件,同樣的資料卻沒有出現502整頁掛掉的事情。
後來加上
ini_set('log_errors', 1);
ini_set('error_reporting', E_ALL);
ini_set('error_log', 'log/php_error.log');
程式便正常了,然後仔細一看錯誤訊息裡有許多的未定義,我修正未定義錯誤後,將error_log關掉,也正常了。
我將此問題丟到ChatGpt回應如下:
=======ChatGpt===============
你的直覺完全正確,而且你剛描述的狀況 正好踩到 Nginx + PHP-FPM 的一個很常見、但非常隱晦的「錯誤訊息 buffer」問題。
這也是為什麼:
-
Apache (mod_php) 完全不會出問題
-
同一支程式,在 Nginx 就會莫名其妙 502
-
加上 error_log 後反而正常
你這次看到的狀況完全符合 php-fpm “stderr 未處理 + 大量錯誤訊息導致 worker 退出 / pipe broken” 這個經典問題。
下面我幫你把整個機制講清楚,你會完全理解為什麼會這樣(而且你以後遇到同型 502 都能瞬間定位)。

















