将Apache指向mod_wsgi

时间:2018-09-20 14:29:21

标签: python apache flask mod-wsgi

如果您喜欢单行回答涉及Apache的冗长问题,那么这里是候选人。

简短

如何配置httpd.conf以运行mod_wsgi?什么是适当的“管道”?

长尖塔

我从c:/Apache24/conf/httpd.conf开始,其中的相关位是:

ServerRoot "c:/Apache24"
Listen 80
LoadModule access_compat_module modules/mod_access_compat.so
...
LoadModule mime_module modules/mod_mime.so
<Directory />
    AllowOverride none
    Require all denied
</Directory>
DocumentRoot "c:/Apache24/htdocs"
<Directory "c:/Apache24/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
ErrorLog "logs/error.log"
LogLevel warn
<IfModule log_config_module>
    ...
    CustomLog "logs/access.log" common
</IfModule>

正确投放

c:/Apache24/htdocs/
            └── static/
                └── index.html

我将后者修改为

c:/Apache24/htdocs/
            ├── static/
            │   └── index.html
            └── dynamic/
                ├── hello.py
                └── hello.wsgi

append位于行httpd.conf的尾部

LoadFile "d:/anaconda3/python36.dll"
LoadModule wsgi_module "d:/anaconda3/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "d:/anaconda3"

<VirtualHost *>
    # ServerName example.com
    WSGIScriptAlias \ c:\Apache24\htdocs\dynamic\hello.wsgi
    <Directory c:\Apache24\htdocs\dynamic>
        Require all granted
    </Directory>
</VirtualHost>

WSGIScriptReloading On

我注释了ServerName指令,因为我认为这与此处无关。

hello.py包含您的典型单路启动程序,没有主后卫,尽管IIUC无关紧要,因为无论如何它都会被mod_wsgi跳过。 Python代码使用Flask。该问题可能是任何WSGI Web应用程序常见的。 hello.wsgi has

from hello import app as application

/\的混乱中可以看出,我全部在Windows上运行。我认为这也无关紧要,以及它是Windows Server 2008的事实(不要问)。我也在使用最新的Anaconda3(目前为3.5.2)。现在我终于可以问这个问题了。

问题

当我请求http://mysite.foo/dynamic时,我可以下载.py.wsgi文件,但是VirtualHost指令似乎还可以,因为在日志logs/access.loglogs/errors.log的末尾没有抱怨。

我缺少什么管道?如何激活hello.py中的路线?

注意事项

即使使用Apache表示正在走向部署,打开调试仍然有帮助,以便Flask display the error messages in the Apache error log

0 个答案:

没有答案