FastCGI:「與伺服器的通訊已中止:讀取失敗」僅適用於一個特定文件

FastCGI:「與伺服器的通訊已中止:讀取失敗」僅適用於一個特定文件

相關問題: FastCGI 和 Apache 500 間歇性錯誤

該解決方案對我不起作用。


問題:

我有一個 Laravel 5.1 應用程式(在其他伺服器上生產時沒有任何問題)在新的伺服器上運行Ubuntu 14.04 伺服器阿帕契2.4.7和 PHP 透過PHP-FPM

只要應用程式中未呼叫某個文件,一切都會正常運作:

$compiledPath = __DIR__.'/cache/compiled.php';

if (file_exists($compiledPath)) {
    require $compiledPath; // this causes a "500 Internal Server Error"
}

這是 Laravel 特定文件自動建立透過框架本身來加快速度(所以這不是我的程式碼中的錯誤),它確實存在並且我擁有完全的存取權限。它是約600kB在尺寸方面。當我刪除它時,一切正常。但是,當我告訴 Laravel 再次創建它,然後點擊應用程式的任何路由時,我收到“500 內部伺服器錯誤”,並包含以下日誌條目:

[fastcgi:error] [pid 14334] (104)連線由對等方重置:[客戶端xxx.xxx.xxx.xxx:41395] FastCGI:與伺服器「/var/www/clients/client1/web1/cgi -bin/ 進行通訊” php5-fcgi-yyy.yyy.yyy.yyy-80-domain.com」已中止:讀取失敗

[fastcgi:錯誤] [pid 14334] [客戶端xxx.xxx.xxx.xxx:41395] FastCGI:從伺服器「/var/www/clients/client1/web1/cgi-bin/php5- 收到不完整的標頭(0 位元組)” fcgi-yyy.yyy.yyy.yyy-80-domain.com"

[fastcgi:error] [pid 14334] (104)連線由對等方重置:[客戶端xxx.xxx.xxx.xxx:41395] FastCGI:與伺服器「/var/www/clients/client1/web1/cgi -bin/ 進行通訊” php5-fcgi-yyy.yyy.yyy.yyy-80-domain.com」已中止:讀取失敗

[fastcgi:錯誤] [pid 14334] [客戶端xxx.xxx.xxx.xxx:41395] FastCGI:從伺服器「/var/www/clients/client1/web1/cgi-bin/php5- 收到不完整的標頭(0 位元組)” fcgi-yyy.yyy.yyy.yyy-80-domain.com"

我嘗試過的:

我嘗試了上述相關問題中的解決方案,這也代表了我能找到的有關此問題的大多數其他建議:Play around with the common PHP-FPM settings in order to allocate more resources。接受的答案也提到了完全放棄FastCGI的選擇,但我不想去那裡。所以我嘗試了這些價值觀,但沒有運氣。

伺服器上沒有任何負載,因為我是唯一使用它的人,所以我真的懷疑這是可用資源的問題(這是一個具有 12GB RAM 的 VPS)。會不會跟檔案大小有關係?這是唯一一個這麼大的 PHP 檔案。

我可以在兩台具有相同配置的不同伺服器上重現該問題。它做了不是發生在具有 Apache 2.2 和 FastCGI 的 Ubuntu 12.04 伺服器上。

我目前的配置:

PHP-FPM:

pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 0

<IfModule mod_fastcgi.c>
    ...
    Alias /php5-fcgi /var/www/....
    FastCgiExternalServer /var/www/.... -idle-timeout 300 -socket /var/lib/php5-fpm/web1.sock -pass-header Authorization
</IfModule>

php.ini

memory_limit = 512M
output_buffering = on

答案1

如果 PHP 僅在特定原始檔上失敗,最可能的原因是某些 PHP 程式碼加速器(操作碼快取)(如 Xcache、APC 或 eAccelerator)有檔案問題。這可能是由於加速器或 PHP 本身的錯誤造成的。

您可以嘗試透過 PHP 命令列介面 ( php-clicommand) 執行腳本,因為 PHP CLI 不使用任何加速器。

相關內容