Apache2는 shebang 기반 cgi 파일을 실행하지 않습니다.

Apache2는 shebang 기반 cgi 파일을 실행하지 않습니다.

PHP 대신 Python을 서버 스크립팅 언어로 사용하려고 합니다.

localhost를 구성했고 그 아래에서 PHP 파일이 제대로 실행되고 있습니다.

파일을 생성하면.../localhost/temp/test.cgi(실행 가능하게 만듭니다):

#!/home/mike/python_venvs/test_venv369/bin/python

print( """Content-type:text/html\n\n
            <!DOCTYPE html>
            <html lang="en">
                <head>
                    <meta charset="utf-8"/>
TEST
                    <title>My server-side template</title>
                </head>
                <body>""" )
print( "</body></html>")

...Python 스크립트로 실행되지 않습니다. 파일의 텍스트는 브라우저에만 표시됩니다.

나는 이것에 대해 많은 검색을했습니다. httpd.conf와 같은 파일이 없습니다. 내 Apache2 설정은 다음과 같습니다. /usr/sbin/apache2에서 실행 가능하며 대부분의 구성 파일은 분명히 /etc/apache2 아래에 있습니다. 특히 /sites-available처럼 보입니다. 여기에는 000-default .conf 및 default라는 두 개의 파일이 있습니다. -ssl.conf.

내가 틀렸을 수도 있지만 httpd.conf는 작업을 수행하는 "오래된" Apache 방식이라고 생각합니다.

000-default.conf 하단에서 완전히 혼란스럽기는 하지만 (단지) 가능성이 있는 줄을 발견했습니다.

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf

...그래서 apache2 서비스의 주석 처리를 제거하고 다시 시작했습니다. 다르지 않습니다.

000-default.conf의 세부사항
(/etc/apache2/sites-available에서). localhost 디렉토리를 변경하려고 하면 이 파일의 변경 사항이 효과가 있는 것 같습니다.

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that...

    ServerAdmin webmaster@localhost

    DocumentRoot "/media/mike/W10 D drive/My Documents/localhost"
    <Directory />
                Options FollowSymLinks
                 AllowOverride All 
    </Directory>
    <Directory /media/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Require all granted
    </Directory>
    ...

CGI 스크립트가 어디로 가야 하는지, 어디에서 구성해야 하는지는 모르지만(아래 첫 번째 답변을 확인하겠지만) 위에서 언급한 대로 .../localhost/ 아래의 .html 파일로 작업하기를 원한다는 점을 고려하면, 위치를 "CGI 활성화"로 설정하고 싶습니다.

~ 후에
<Directory>내 경우에는 이 질문에 대한 짧은 대답(구체적으로)은 태그나 블록 또는 무엇이라고 불리는지 "옵션" 중 하나로 "ExecCGI"를 간단히 추가하는 것이었습니다 .

답변1

몇 가지 추가 조치를 취해야 합니다.

  1. CGI 하위 시스템 활성화a2enmod cgid
  2. mods-enabled/mime.conf특정 vHost 섹션에서 CGI 처리기의 주석 처리를 제거 하거나 이 지시어를 포함합니다.

    AddHandler cgi-script .cgi
    
  3. Options ExecCGI이러한 프로그램을 사용할 수 있는 가상 호스트 또는 최상위 디렉토리에 포함되어 있습니다 .

테스트를 위해 내가 한 일은 내 파일 ExecCGI에 CGI 처리기와 명령문을 포함시키는 것이었습니다.sites-enabled/000-default.conf

<VirtualHost *:80>
        ...

        AddHandler cgi-script .cgi

        <Directory "/var/www/html">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch

                Require all granted
        </Directory>
</VirtualHost>

그런 다음 다음과 같은 실행 가능한 스크립트를 만들고 실행할 수 있었습니다.time.cgi

답변2

귀하의 Apache 설정은 Debian에 있는 것처럼 보이며 내 시스템에서는 활성화되어 있습니다. 즉, to 가 serve-cgi-bin.conf있습니다 ./etc/apache2/conf-enabled/serve-cgi-bin.conf../conf-available/serve-cgi-bin.conf

시스템에 심볼릭 링크가 없으면 다음을 실행하십시오.

sudo a2enconf serve-cgi-bin

그 줄의 주석 처리를 제거할 필요는 없습니다 000-default.conf.

파일은 다음과 같습니다.

$ cat /etc/apache2/conf-available/serve-cgi-bin.conf
<IfModule mod_alias.c>
        <IfModule mod_cgi.c>
                Define ENABLE_USR_LIB_CGI_BIN
        </IfModule>

        <IfModule mod_cgid.c>
                Define ENABLE_USR_LIB_CGI_BIN
        </IfModule>

        <IfDefine ENABLE_USR_LIB_CGI_BIN>
                ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
                <Directory "/usr/lib/cgi-bin">
                        AllowOverride None
                        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                        Require all granted
                </Directory>
        </IfDefine>
</IfModule>

cgi 디렉터리에서 /usr/lib/cgi-bin실행 파일을 해당 디렉터리로 이동합니다. 활성화해야 합니다.module_cgi또는mod_cgid, 첫 번째 항목을 선택하고 서버를 다시 시작합니다.

sudo a2enmod cgi
sudo systemctl restart apache2

가다http://localhost/cgi-bin/test.cgi"테스트"가 표시되어야 합니다.

다른 디렉터리나 다른 경로를 사용하려면 ScriptAlias비활성화 serve-cgi-bin.conf( sudo a2disconf serve-cgi-bin)하고 내용을 serve-cgi-bin.conf디렉터리에 복사한 VirtualHost후 필요에 따라 위치를 변경할 수 있습니다.

관련 정보