【问题标题】:Configure apache to run python (cgi)配置 apache 运行 python (cgi)
【发布时间】:2014-07-13 00:48:19
【问题描述】:

我已经安装了 apache 2.4.4 的 wampserver

我已经安装了 python 并创建了一个测试文件:

#!/Python34/python
print "Content-type: text/html"
print
print "<html><head>"
print ""
print "</head><body>"
print "Hello."
print "</body></html>"

我想知道如何运行这个脚本?

【问题讨论】:

标签: python apache cgi


【解决方案1】:

我个人不喜欢 CGI 和所有这些东西的工作方式(生成进程缓慢,需要使用诸如“fastcgi”之类的技巧来绕过它等等......)

我认为您可以将您的 Python 程序构建为 HTTP 服务器(例如,使用cherrypy,或任何您想要的。),启动您的 Python 程序以在 localhost 上侦听:无论如何,然后从 Apache 端配置一个代理到本地主机:随便。

优点:

  • 不需要 apache 为每个请求派生一个 Python 进程(一个昂贵的操作)
  • 您可以轻松更改 Web 服务器(例如切换到 Nginx),因为 nginx 还支持代理。
  • 您将能够启动多个 Python 服务器并在它们之间进行负载平衡
  • 您将能够在不同的主机上托管您的 python 服务器以进行负载平衡费用
  • 如果您在应用前面放置 Varnish 以缓存结果,您将能够完全绕过 Apache。
  • Cherrypy 可以自动重新加载文件如果更改,无需重新启动 apache。
  • 您将坚持使用 HTTP,无需使用 fastcgi 之类的协议。
  • 很容易在没有 Apache 的开发机器上进行测试,只需将浏览器指向 localhost:whatever

配置 apache 2 以将您的请求传递给您的 python 守护程序非常简单:

<VirtualHost *:80>
    ServerName example.com
    ProxyPass / http://localhost:8080/
</VirtualHost>

还有来自cherrypy 文档的hello world:

import cherrypy

class HelloWorld(object):
    def index(self):
        return "Hello World!"
    index.exposed = True

cherrypy.quickstart(HelloWorld())

【讨论】:

    【解决方案2】:

    +1 对 Julien Palard 关于不使用 CGI 的说法,它真的很慢而且效率低下。使用 Apache 独立运行服务器并通过代理对其进行代理的另一种方法是使用 mod_wsgi,它允许您在 Apache 进程内运行 Python 进程。大多数 Web 框架(Django、Bottle、Flask、CherryPy、web2py 等)都可以很好地使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      相关资源
      最近更新 更多