【问题标题】:Apache set-up with Flask and wsgi使用 Flask 和 wsgi 设置 Apache
【发布时间】:2014-06-04 19:10:50
【问题描述】:

我有一个使用 Flask 和 python 构建的小型 Web 应用程序。使用我用于开发一切的内部服务器运行良好。但是现在我想使用 apache 来开始使用它。但它不起作用。请记住,我以前从未使用过 apache 或基于 Web 的东西。

我以本指南为起点: http://flask.pocoo.org/docs/deploying/mod_wsgi/

现在我的应用程序位于名为“/rg/server.py”的文件中,如下所示:

app=Flask(__name__)
# all app routes...

if __name__ == '__main__':
    app.run(
        debug=True,
        host="127.0.0.1",
        port=80
    )

比我有一个 wsgi 文件为“/rg/wsgi/minerva.wsgi”

import sys
sys.path.insert(0, /rg)
from server import app as minerva

最后我在“etc/apach2/sites-available/minerva.com”中有一个 apache 配置文件:

<VirtualHost *>
    ServerName minerva.test

    WSGIDaemonProcess minerva threads=10
    WSGIScriptAlias / /rg/wsgi/minerva.wsgi

    <Directory /rg>
    WSGIProcessGroup minerva
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
    </Directory>

</VirtualHost>

然后我用成功的 a2ensite minerva.com 更新了 apache。然后我releaded Apache,没有错误。但是我无法以任何方式访问 minerva.test...

如果我输入 apache2ctl -S 它会列出 minerva.test

我不知道出了什么问题...

系统信息: 操作系统:debian 64位 蟒蛇2.7

【问题讨论】:

    标签: python linux apache wsgi


    【解决方案1】:

    对于 mod_wsgi,WSGI 应用程序入口点必须称为“应用程序”。你有:

    from server import app as minerva
    

    应该是:

    from server import app as application
    

    你甚至没有走那么远,否则这条线:

    sys.path.insert(0, /rg)
    

    会出现语法错误。

    更进一步,而不是:

    <VirtualHost *>
    

    你应该有:

    <VirtualHost *:80>
    

    最后,如果“minerva.test”实际上不是一个可解析的主机,那么您将无处可去。

    因此,请使用您在浏览器中使用的实际 URL 填写您的问题,并指出“minerva.test”是否甚至列在本地主机文件中。

    【讨论】:

    • 谢谢。按照你说的做之后就可以了!只需要弄清楚如何允许我的局域网中的客户端通过 minerva.test url 访问它 :)
    【解决方案2】:

    我要检查的第一件事是确保 mod_wsgi 已由 apache 安装和加载。如果没问题,您的设置看起来与我的非常相似,但有一些细微差别:

    1. 我必须在我的 VirtualHost 定义上方添加 WSGISocketPrefix /var/run/wsgi。见here
    2. 我在 WSGIDaemonProcess 行中包含了用户和组值。

    【讨论】:

      最近更新 更多