ErrorDocument CGI가 실행되지 않았습니다. 소스 코드를 표시합니다.

ErrorDocument CGI가 실행되지 않았습니다. 소스 코드를 표시합니다.

Apache HTTP Server 2.2에는 멋진 메시지를 표시하고 여러 오류 코드에 반응하며 각 오류 코드에 대한 추가 정보를 표시하는 ErrorDocument PHP CGI 스크립트가 구성되어 있습니다. 이것은 훌륭하게 작동합니다.

하지만 2.4 버전으로 업그레이드한 이후에는 더 이상 실행되지 않습니다. 대신 첫 번째 줄을 포함하여 파일의 전체 소스 코드가 표시됩니다. 아래를 참조하세요. 어떻게 되어가나요?

구성은 매우 간단합니다.

ErrorDocument 401 /cgi-bin/error.cgi
ErrorDocument 403 /cgi-bin/error.cgi
ErrorDocument 404 /cgi-bin/error.cgi
ErrorDocument 500 /cgi-bin/error.cgi

파일은 올바른 사용자 및 그룹이 소유하고 있으며 실행 가능합니다. 다음과 같습니다.

#!/usr/bin/php-cgi
<?
$errorCode = $_SERVER['REDIRECT_STATUS'];
$reqUrl = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
...

액세스 로그에는 500 또는 403과 같은 오류 코드가 있는 예상 항목이 포함되어 있습니다. 오류 로그에는 제한된 디렉터리에서 클라이언트가 거부되었음을 알려주는데, 이는 예상된 현상이기도 합니다.

그런데 잘못된 문서 파일이 더 이상 전혀 실행되지 않는 이유는 무엇입니까?

Ubuntu 14.04의 Apache 버전은 2.2.x ~ 2.4.7입니다.

고쳐 쓰다:conf-enabled/serve-cgi-bin.conf가 활성화되었습니다. 이것은 내 VirtualHost 구성의 일부입니다.

<VirtualHost 1.2.3.4:80 [1:2:3::4]:80>
    ServerName example.de
    ServerAlias www.example.de
    DocumentRoot /var/www/web001
    ErrorDocument 401 /cgi-bin/error.cgi
    ErrorDocument 403 /cgi-bin/error.cgi
    ErrorDocument 404 /cgi-bin/error.cgi
    ErrorDocument 500 /cgi-bin/error.cgi
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xhtml+xml application/x-javascript text/
    SuexecUserGroup web001 webusers
    ScriptAlias /cgi-bin/ /var/www/web001/cgi-bin/
    AddHandler fcgid-script .php
    FCGIWrapper /var/www/web001/cgi-bin/php-fcgi .php
    <Directory "/var/www/web001">
        Options +Includes +ExecCGI
    </Directory>
</VirtualHost>

답변1

이전 기본 구성과 새 기본 구성을 자세히 비교한 결과 cgid 모듈이 더 이상 포함되지 않은 것으로 나타났습니다. 활성화되면 오류 CGI 페이지가 다시 예상대로 작동합니다. 다른 CGI 페이지도 작동하지 않을 것이라고 생각하지만 자주 사용하지 않아서 눈치 채지 못했습니다. 이것이 Ubuntu 관련 변경인지 아니면 현재 모든 Apache 설치에 CGI가 활성화되어 있지 않은지 확실하지 않습니다.

빠른 수정은 다음과 같습니다.

a2enmod cgid

그런 다음 Apache를 다시 시작하십시오.

관련 정보