【发布时间】:2015-03-08 06:25:30
【问题描述】:
我花了很长时间才弄清楚如何让 Apache2.4 运行我的“你好,世界!”蟒蛇脚本。我终于弄清楚了我必须在命令行中运行什么命令序列才能使脚本正常工作。不幸的是,当我运行这些命令时,我仍然不明白发生了什么。我想知道为什么他们让我的脚本工作。我知道这一切都在文档中,但到目前为止,我发现那里写的内容有点难以理解。
这是我使用的命令列表。
sudo apt-get install apache2sudo a2dismod mpm_eventsudo a2enmod mpm_preforksudo service apache2 restartsudo a2enmod cgisudo service apache2 restart
非常感谢第 2、3 和 5 步中的任何 cmets。
之后我在 /usr/lib/cgi-bin 中创建 script.py:
#! /usr/bin/python
print "Content-type: text/html\n\n"
print "Hello, world!"
出于某种原因,script.py 的前两行是绝对必要的。没有它们,代码就无法运行。
最后我跑了:
sudo chmod +x /usr/lib/cgi-bin/script.py #why do I need this? how come it is not executable by default?
sudo service apache2 restart
当我打电话给http://localhost/cgi-bin/script.py 时,我得到了我的问候,世界!
我什至不必修改 apache2.conf、serve-cgi-bin.conf 或 000-default.conf
如果有更明显/更好/正确的方法来使用 Apache24 运行 python 脚本,我真的很想学习它。
附:如果在 Apache 上运行脚本时遇到问题,有人建议将 AddHandler cgi-script .py .cgi 添加到 /etc/apache2/conf-enabled/serve-cgi-bin.conf。但由于某种原因,它对我的情况没有任何影响。为什么?
附言我使用的是 Ubuntu 14.04。
【问题讨论】:
-
您必须在脚本顶部有
shebang以指定要使用的解释器(在本例中为python)。您还必须使用chmod()设置文件的执行权限,以便网络服务器可以执行它。只是将任何文件添加到cgi-bin中不会自动授予它执行权限。 -
代码在没有第二行的情况下运行,但是apache无论如何都会给出500错误。
-
更好的方法是将
mod_wsgi与任何Web框架(Pyramid、Flask、Django等)一起使用 -
谢谢。那么 mpm_event 和 mpm_prefork 呢,它们都是什么?