Python + Apache: WSGIPythonPath相对路径
我在Windows上设置一个Flask应用程序。在我的httd.conf文件中,我包含了一个应用程序的配置文件,这个文件位于这样的目录中:
C:\prod\apps\my_app\
\my_app
my_app.conf
my_app.py
my_app.wsgi
\my_service
\my_data
\my_python_virtual_env
我可以在Apache中配置这个应用,并且使用绝对路径来设置my_app.conf中的WSGIPythonPath,这样一切运行得很好。但是,我无法使用相对路径来设置WSGIPythonPath让它工作。我本以为,根据上面的结构,它应该像这样:
WSGIPythonPath ../my_app;../my_service;../my_data;../my_python_virtual_env
<Directory "/">
Require all granted
</Directory>
但是,Apache并没有按照我想的那样理解这些相对路径的根目录。我想知道我尝试的这个方法是否可行,如果不行,有没有其他建议可以让我实现这个目标?如果能为不同的环境使用一个配置文件,那就太好了。
1 个回答
1
你需要多了解一下 WSGI 和 modwsgi 是怎么和 Apache 一起工作的,以及一些最佳实践。
首先,你应该在一个独立的 virtualenv 环境中构建你的 Flask 应用。这是任何基于 Python 的网页应用(无论是 Flask、Django 还是其他)的最佳做法。使用 pip 来管理你的软件包。搜索这两个词,你会找到很多教程教你怎么做。
接下来,你应该把 Flask 应用的配置放在 Apache 的一个命名虚拟主机上,并指定一个专用的端口。你需要确保你的 WSGIDaemonProcess
包含指向 Flask 的 site-packages 的虚拟环境特定的 python-path
变量。
你还应该创建一个系统 Flask 用户和组,以便将 Flask 系统与其他部分隔离开来。这样做会更安全。
下面是一个示例配置。注意我创建了一个特定的 flask-main
用户和 flask-main
组,并且我把所有流量指向我的 Flask 应用的端口设置为 8789。
#####
# START: Flask App
WSGISocketPrefix /var/run/wsgi
Listen 8789
NameVirtualHost *:8789
<VirtualHost *:8789>
DocumentRoot /path/to/www/
ErrorLog "/path/to/logs/httpd/flask-8789-error_log"
LogLevel info
ProxyRequests Off
WSGIDaemonProcess flask-main user=flask-main group=flask-main display-name=%{GROUP} python-path=/path/to/www:/path/to/lib/python2.6/site-packages
WSGIProcessGroup flask-main
WSGIScriptAlias / /path/to/www/mygateway.wsgi process-group=flask-main application-group=%{GLOBAL}
<Directory /path/to/www>
WSGIProcessGroup run
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
<Directory /path/to/www/static>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
希望这些能帮助你朝着正确的方向前进。