Nginx

隨機(不是全部)頁面上的 502 錯誤

  • July 28, 2015

幾週前,我在 Google 網站管理員工具中註意到我的一些 URL 正在返回 502。

一個這樣的 URL 是http://www.sau.com.au/forums/topic/437438-around-the-bay-wrap-up/

此 URL 為任何桌面皮膚返回 502,但在移動設備上工作正常(不同皮膚)

請注意,它會很快返回 502,這表明它不是執行或某種形式的超時。

除了幾個這樣的,網站上的所有其他 URL 都很好。

唯一有幫助的日誌條目就是這個;

2015/06/29 09:33:39

$$ error $$19650#0:* 4431763 上游過早關閉 FastCGI 標準輸出,同時從上游讀取響應標頭,客戶端:94.228.34.203,伺服器:sau.com.au,請求:“GET /forums/topic/437438-around-the-bay-wrap -up/ HTTP/1.1”,上游:“fastcgi://unix:/var/run/php-fpm/php-fpm.sock:”,主機:“www.sau.com.au”,引用者:“ http ://www.sau.com.au/forums/forum/100-victoria/

我還重新啟動了 APC,但沒有幫助。它只有 1.5% 的碎片。

我找不到任何達到限制的條目。伺服器的規格很高,因此 PHP 有很多記憶體、請求大小和很長的超時時間。

我嘗試了以下我閱讀但沒有差異的內容。

fastcgi_buffer_size 10240k;
fastcgi_buffers 4 10240k;

我不願意做任何大的改變,因為這只是在某些頁面上。一個執行緒建議將 PHP 更新到 5.5。

我不知道現在該去哪裡尋求進一步的幫助。我的下一步應該是什麼?

一些資訊;

nginx version: nginx/1.6.2
PHP 5.3.3 (fpm-fcgi) (built: Oct 30 2014 20:14:56)

更新 1

PHP 錯誤日誌沒有寫入任何內容。雖然啟用了錯誤日誌記錄;

php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on

更新 2

dmesg 似乎沒有更新,也沒有 kernel.log;

-rw-r--r--   1 root   root       41179 Dec 18  2014 dmesg

解決

我在這個答案中按照@sa289 的建議安裝了 XDebug,為此我需要從 PHP 5.3 更新到 PHP 5.5。我希望這會自行解決問題,但事實並非如此。所以,我安裝了 XDebug 並將 zend_extension 添加到 php.ini,重新啟動 PHP,瞧,502 不見了。我再次註釋掉了 zend 擴展並且 502 的返回。XDebug 來救援。沒有牢牢把握原因或真正的解決方案,但這對我來說已經足夠了。

我會通過使用 Xdebug 查看它可能在哪裡崩潰。Xdebug 可用於執行稱為跟踪的操作,它會告訴您執行的每一行程式碼,這樣您就可以看到崩潰前執行的最後一行程式碼,從而為您指明正確的方向。您可以讓它僅在設置了某個 cookie 時進行跟踪,這樣您就不會為每個請求生成跟踪日誌。特別檢查以下配置設置:

  • xdebug.trace_enable_trigger
  • xdebug.trace_output_dir
  • xdebug.collect_params
  • xdebug.trace_output_name(我喜歡“trace.%p.%t”,因為它將 PID 放在文件名中,這在某些情況下會有所幫助)

有關這些配置參數以及其他參數的詳細資訊,請參閱http://xdebug.org/docs/all_settings 。

引用自:https://serverfault.com/questions/702227