Apache2 不会运行基于 shebang 的 cgi 文件

Apache2 不会运行基于 shebang 的 cgi 文件

我正在尝试使用 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。您可能应该复制该配置并根据您的特定需求进行调整。

相关内容