【问题标题】:How do I get a Python cgi script running in Apache2如何获得在 Apache2 中运行的 Python cgi 脚本
【发布时间】:2020-04-07 20:58:44
【问题描述】:

我有一个非常简单的test.py,位于/var/www/html/master.com/,我正在尝试在 Ubuntu 18.1 上的 Apache2 中运行

我的 Python 代码:

#!/usr/bin/env python

print("Content-type: text/html\n\n")
print("<h1>Hello</h1>")

到目前为止我已经运行了什么:

运行a2enmod cgi启用cgi:

ISimon@simon-EasyNote-TK85:~$ a2enmod cgi
Your MPM seems to be threaded. Selecting cgid instead of cgi.
Module cgid already enabled

/etc/apache2/conf-available/ 创建了文件cgi-enabled.conf,其中包含以下内容:

# create new
# process .cgi and .py as CGI scripts

<Directory "/var/www/html/master.com">
  Options + ExecCGI
  AddHandler cgi-script .cgi .py
</Directory>

systemctl restart apache2重新启动Apache2

然后我去了http://localhost/test.py,它提供下载文件。它应该显示为纯 html。

如何正确配置我的服务器?

【问题讨论】:

  • 通常 CGI 脚本只在文件夹 cgi-bin 中执行。也许您应该将代码放在子文件夹cgi-bin 并运行localhost/cgi-bin/test.py
  • 可能脚本必须设置为可执行文件 - chmod a+x test.py。它应该在第一行有shebang (#!) 以告知哪个程序应该运行此代码 - 即#!/usr/bin/env python
  • @furas 我有 shebang 行,我尝试了命令 chmod a+x test.py 遗憾的是它完全一样
  • 请始终添加有问题的代码、数据和错误消息,而不是在评论中 - 它们将更具可读性,所有人都会看到。
  • 我检查了 apache 文档,它将您的配置显示为在主文件夹中运行它的方法。坦率地说,我不使用CGI,而是使用像 Flask、Django 这样的 Web 框架,因为它更容易编写代码——它们有很多有用的元素。而且代码组织得更好。

标签: python apache server apache2 cgi


【解决方案1】:

您可能必须将脚本设置为可执行文件

chmod a+x test.py

并且它应该在第一行有 shebang (#!) 以通知系统应该运行此代码的程序 - 即。

#!/usr/bin/env python

【讨论】: