Apache与Flask和wsgi的配置

0 投票
2 回答
1781 浏览
提问于 2025-04-18 08:37

我有一个小的网页应用,是用Flask和Python做的。在我用的内部服务器上,一切运行得很好。不过现在我想用Apache来运行它,但却不行。要知道,我之前从来没有接触过Apache或者网页相关的东西。

我用这个指南作为起点: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

最后,我还有一个Apache配置文件,路径是“etc/apach2/sites-available/minerva.com”:

<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,这个操作成功了。然后我重新加载了Apache,没有出现错误。但是我还是无法访问minerva.test...

如果我输入apache2ctl -S,确实能看到minerva.test。

我不知道哪里出错了...

系统信息:
操作系统:debian 64位
Python版本:2.7

2 个回答

0

我首先会检查一下mod_wsgi是否已经安装并且被apache加载。如果这一切都没问题,你的设置和我的很相似,只是有一些小的不同:

  1. 我需要在我的VirtualHost定义上方添加一行:WSGISocketPrefix /var/run/wsgi。可以参考这里
  2. 我在WSGIDaemonProcess这一行中加入了用户和组的值。
0

对于mod_wsgi来说,WSGI应用程序的入口点必须叫做'application'。你现在的代码是:

from server import app as minerva

应该改成:

from server import app as application

不过你现在连这一步都没做到,否则这一行:

sys.path.insert(0, /rg)

会出现语法错误。

再往回看,原本应该是:

<VirtualHost *>

你应该写成:

<VirtualHost *:80>

最后,如果'minerva.test'这个地址实际上无法解析,你就无法继续了。

所以请在你的问题中填上你在浏览器中使用的实际网址,并且说明'minerva.test'是否在本地的hosts文件中列出。

撰写回答