Apache 从来不运行我的 Python 脚本

Apache 从来不运行我的 Python 脚本

环境:Ubuntu 16,Apache 2.4

我最近三次尝试设置 Apache 来提供 Python 时都遇到了同样的问题:Apache 希望让我下载脚本,而不是运行它并在浏览器中提供 html。每次我弄清楚时,结果都是一些我无法完全弄清楚的事情的组合。

为简单起见:

我的文件顶部有以下内容:#!/usr/bin/env python2.7

sudo apt-get install libapache2-mod-python

跑步a2enmod python回报Module python already enabled

添加了各种 apache2.conf 指令,但它们都不起作用:

<Directory /var/www/html>
     Options Indexes FollowSymLinks
     Options ExecCGI
     AllowOverride None
     Order allow,deny
     Allow from all
     AddHandler cgi-script .cgi
</Directory>

根据此链接,这就是所需的全部内容:

<Directory /srv/www/yoursite/public_html>
     Options +ExecCGI
     AddHandler cgi-script .py
</Directory>

并且,这个可以在另一台机器上运行,但不能在当前机器上运行:

<Directory /var/www/>
     Options +ExecCGI
     AddHandler cgi-script .py
     PythonHandler mod_python.publisher
     Options Indexes FollowSymLinks
     AllowOverride None
     Require all granted
</Directory>

<Directory /var/www/html/index.py>
     Options +ExecCGI
</Directory>

*抱歉,如果这些 apache2.conf 看起来很乱,或者有多余的行,我已经尝试了一切方法。

跑步sudo a2enmod cgi回报:

您的 MPM 似乎是线程化的。选择 cgid 而不是 cgi。模块 cgid 已启用

.py 脚本是可执行的,归 www-data 所有。

请帮忙!这太令人沮丧了。我还有啥没试过的?我希望这是我最后一次这么做。每次我接近阿帕奇时,我都心存恐惧;也许它能闻到我的气味。



仅供参考:我已尝试过这些网站(以及许多其他网站)上的所有(故障排除)步骤:

https://www.linux.com/blog/configuring-apache2-run-python-scripts

https://stackoverflow.com/questions/28138997/cgi-script-downloads-instead-of-running?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

为什么我会收到错误,无效命令‘PythonHandler’?

https://superuser.com/questions/174071/apache-serves-py-as-downloadable-file-instead-of-executing-it?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa(返回错误及其解决方案)

Apache 无法通过浏览器处理 Python 脚本 (*.py)



更新

所以,就是这样。我使用 /var/www/html/ 中的 test.py 来不更改源目录。也许我的浏览器或访问方式有问题?

$ ls -ltr /var/www/html/test.py
-rwxr-xr-x 1 www-data www-data    71 Mar 31 17:29 test.py

$ cat /var/www/html/test.py 
#!/usr/bin/python2

print("Content-type:text/html\n\n")
print("hello")

$ grep -A 3 '<Directory /var/www/html/>'  /etc/apache2/apache2.conf
<Directory /var/www/html/>
     Options +ExecCGI
     AddHandler cgi-script .py
</Directory>

$ ./test.py
Content-type:text/html


hello

我查看了日志文件。access.log 中没有任何异常,但 error.log 中有一个关于 Python 版本不匹配的错误。根据这个关联,这应该不是问题。无论如何,我通过运行以下命令解决了该错误:

$ apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ apt-get build-dep libapache2-mod-python libapache2-mod-wsgi

证明:脚本下载

还是没运气。我注意到即使停止后,apache2 服务仍在运行。我以为这可能是僵尸进程,于是我终止了所有进程(它一直弹出),卸载并清除了 apache2,重新启动并重试。

答案1

您已获得以下配置:

<Directory /var/www/html>
     Options Indexes FollowSymLinks
     Options ExecCGI
     AllowOverride None
     Order allow,deny
     Allow from all
     AddHandler cgi-script .cgi
</Directory>

这会告诉您的 Apache 服务器,以 结尾的文件.cgi应作为脚本处理。但您已将脚本命名为test.py

请将脚本重命名为test.cgi或将配置更改为

     AddHandler cgi-script .py

答案2

你可能已经接近了。

这是我在 Ubuntu 上添加到 Apache2 设置的唯一内容

注意烫发

#ls -ltr  /var/www/html/python/char.py 
    -rwxr-xr-x 1 www-data www-data 71 Mar 31 17:16 /var/www/html/python/char.py
    
    

简单的 python2 脚本 - 确保你设置了内容类型

# cat  /var/www/html/python/char.py 
#!/usr/bin/python2

print("Content-type:text/html\n\n")
print("hello")

在本地运行良好

#/var/www/html/python/char.py 
Content-type:text/html


hello

配置

# grep -A 3 '<Directory /var/www/html/python/>'  /etc/apache2/apache2.conf
<Directory /var/www/html/python/>
     Options +ExecCGI
     AddHandler cgi-script .py
</Directory>

Cgi 运行的图片

答案3

我遇到了同样的问题,并尝试了您执行的所有故障排除步骤。我遇到的问题是,我的 php 文件中有指向 cgi 脚本的链接,当我的 php 服务器运行时(使用 php -S localhost:8000),cgi 脚本会从浏览器下载。但是,当我停止 php 服务器,然后使用 localhost/myScript.php 从浏览器访问 php 脚本(因此单击按钮即可从那里访问 cgi)时,它就起作用了。

因此,如果您还在运行 php 服务器,请尝试停止它,然后从浏览器运行 php 文件。

相关内容