FastCGI: 하나의 특정 파일에 대해서만 "서버와의 통신이 중단되었습니다: 읽기 실패"

FastCGI: 하나의 특정 파일에 대해서만 "서버와의 통신이 중단되었습니다: 읽기 실패"

관련 질문: FastCGI 및 Apache 500 오류가 간헐적으로 발생함

해결책이 나에게 적합하지 않습니다.


문제:

나는 새로운 환경에서 실행되는 Laravel 5.1 애플리케이션(다른 서버에서 아무런 문제 없이 생산 중임)을 가지고 있습니다.우분투 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:오류] [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:오류] [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"

내가 시도한 것:

나는 위에서 언급한 관련 질문에서 해결책을 시도했는데, 이는 또한 내가 찾을 수 있는 이 문제에 관한 다른 제안의 대부분을 나타냅니다. 더 많은 리소스를 할당하기 위해 일반적인 PHP-FPM 설정을 가지고 놀아보세요. 허용된 답변에는 FastCGI를 완전히 포기하는 옵션도 언급되어 있지만 거기로 가고 싶지 않습니다. 그래서 값을 가지고 놀았지만 운이 없었습니다.

저 혼자만 사용하기 때문에 서버에 부하가 전혀 없는데, 가용 리소스에 문제가 있는 것인지 정말 의심스럽습니다(RAM 12GB의 VPS입니다).파일 크기와 관련이 있을까요?이렇게 큰 유일한 PHP 파일입니다.

동일한 구성을 사용하는 2개의 다른 서버에서 문제를 재현할 수 있습니다. 그게했다~ 아니다FastCGI를 사용하는 Apache 2.2가 설치된 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가 특정 소스 파일에서만 실패하는 경우 가장 가능성이 높은 이유는 Xcache, APC 또는 eAccelerator와 같은 일부 PHP 코드 가속기(opcode 캐시)에 파일에 문제가 있기 때문입니다. 이는 가속기 또는 PHP 자체의 버그로 인해 발생할 수 있습니다.

php-cliPHP CLI는 가속기를 사용하지 않으므로 PHP 명령줄 인터페이스(명령)를 통해 스크립트를 실행할 수 있습니다 .

관련 정보