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
몇 가지 추가 조치를 취해야 합니다.
- CGI 하위 시스템 활성화
a2enmod cgid
mods-enabled/mime.conf
특정 vHost 섹션에서 CGI 처리기의 주석 처리를 제거 하거나 이 지시어를 포함합니다.AddHandler cgi-script .cgi
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
후 필요에 따라 위치를 변경할 수 있습니다.