如果您喜欢单行回答涉及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.log
和logs/errors.log
的末尾没有抱怨。
我缺少什么管道?如何激活hello.py
中的路线?
注意事项
即使使用Apache表示正在走向部署,打开调试仍然有帮助,以便Flask display the error messages in the Apache error log。