我正在尝试使用 Python 而不是 PHP 作为服务器脚本语言。
我已经配置了 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 服务。没有区别。
答案1
如果脚本文本仅显示在浏览器中,则意味着 Apache 尚未配置为理解来自该特定位置的 cgi。
看https://httpd.apache.org/docs/2.4/howto/cgi.html- 你需要在某个地方有一个类似这样的指令
<Directory "/var/www/localhost/temp/">
Options +ExecCGI
</Directory>
Apache 默认不允许 CGI,标准配置示例期望 CGI 位于 /cgi-bin/ 中。
还有其他几种配置 CGI 的方法,均记录在上面链接中 - 您必须看看哪种适合您。
根据https://code-maven.com/set-up-cgi-with-apache,配置文件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>
因此,您可以看到,如果启用该配置,您仍然只能从 /usr/lib/cgi 提供 CGI。您可能应该复制该配置并根据您的特定需求进行调整。