
존재하지 않는 PHP 스크립트가 요청되면 mod_proxy_fcgi는 기본적으로 다음과 같이 쓸모 없는 오류 메시지를 제공합니다.
[proxy_fcgi:error] .... AH01071: Got error 'Primary script unknown\n'
이 서버는 Apache 2.4.6(Centos 7)을 사용하고 있으며 PHP 처리는 다음과 같이 구성되어 있습니다.
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
실제 스크립트 이름을 알고 싶습니다. 유용한 정보(예: 결함이 있는 링크 표시, 페이지 이름 오류 또는 단순히 보호되지 않은 wp-login을 사용하여 서버를 찾는 또 다른 바보 사냥임을 표시하는 등)가 포함될 수 있기 때문입니다. .php).
LogLevel을 정보에서 디버그로 변경하려고 시도했지만 오류 로그에는 유효한 PHP 스크립트 액세스 세부 정보도 채워져 실제로 오류가 아니기 때문에 오류 로그가 상당히 엉망이 되었습니다.
존재하지 않는 PHP 스크립트에 대한 실제 스크립트 이름을 포함하는 보다 유용한 Proxy_fcgi 오류 메시지를 얻을 수 있는 방법이 있습니까?
답변1
%L을 포함하여 ErrorLogFormat을 정의한 다음 CustomLog 형식 %L에서 동일한 작업을 수행할 수 있습니다.
그러면 Apache 로그에 오류 로그 항목을 액세스 로그 항목에 바인딩하는 특정 ID가 생성되고 grep만 하면 됩니다.
예:
ErrorLogFormat "[%{u}t] [%-m:%l] [%L] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"
LogFormat "%h %l %u [%L] %t \"%r\" %>s \"%{Referer}i\" \"%{User-Agent}i\"" combined
따라서 다음에 오류가 표시되면 ID를 확인하고 동일한 ID에 대한 access.log를 grep하십시오.
답변2
나는 기록된 오류의 시간을 얻은 다음 해당 시간 주변의 액세스 로그에서 실패를 반환하는 요청을 검색합니다. 그러면 스크립트를 추적하는 데 도움이 됩니다.
답변3
문제의 오류는 Apache가 아닌 FastCGI 응용 프로그램(포트 9000에서 수신 대기하는 모든 항목)에서 발생합니다. Apache는 단순히 FastCGI FCGI_STDERR
스트림으로 반환되는 내용을 보고합니다.
Apache가 PHP-FPM과 통신하는 경우(아마도) PHP-FPM의 로그를 볼 수 있습니다. 파일 error_log
의 지시문을 확인하여 php-fpm.conf
PHP-FPM이 오류를 기록하는 위치를 찾을 수 있습니다. 거기에 더 많은 단서가 있어야 합니다.
답변4
한 가지 해결책은 파일을 핸들러에 전달하기 전에 파일이 존재하는지 확인하는 것입니다. 이는 기본 데비안구성 파일제안.
<FilesMatch ".+\.ph(ar|p|tml)$">
<If "-f %{REQUEST_FILENAME}">
SetHandler "proxy:unix:/run/php/php-fpm.sock|fcgi://localhost"
</If>
</FilesMatch>
이렇게 하면 파일이 존재하지 않으면 PHP 대신 Apache가 이를 처리합니다.