我正在尝试使用 WSGI 从同一服务器为两个 django 项目提供服务,但需要一个从 example.com/(我们称之为 app1)运行,另一个从 example.com/foo/(app2)运行。我尝试使用格雷厄姆的评论中描述的单独的守护进程来设置它,但是当其中一个路径是另一个路径的子目录时,这似乎不起作用。对 example.com/foo/... 的所有请求仍由 app1 处理。
有什么方法可以实现我正在寻找的东西,而无需将两个项目合并为一个(这将是一项艰巨的任务)?
这是我目前在我的站点配置中拥有的:
WSGIDaemonProcess app1 \
python-path=<path for app1's virtualenv>
WSGIDaemonProcess app2 \
python-path=<path for app2's virtualenv>
WSGIScriptAlias / <path to app1's wsgi.py>
WSGIScriptAlias /foo/ <path to app2's wsgi.py>
<Location />
WSGIProcessGroup app1
</Location>
<Location /foo/>
WSGIProcessGroup app2
</Location>
更新:
我尝试使用 LocationMatch 而不是 Location 来尝试将每个请求都委托给不以 /foo 开头的路径以及委托给 app2 的路径,但由于某种原因这也不起作用。现在,对 /foo/... 的请求会导致错误日志中的这一行出现 500 错误:
mod_wsgi (pid=12032): Exception occurred processing WSGI script '<app1's wsgi.py>'.
有任何想法吗?
上面的底部已更改为
<LocationMatch "^/(?!foo.*)">
WSGIProcessGroup app1
</LocationMatch>
<LocationMatch "^/foo.*">
WSGIProcessGroup app2
</LocationMatch>
更新 2:
进一步查看错误日志后,看起来 /foo/... 的请求正在由 app1 的 wsgi.py 文件处理,但使用 app2 的 python 路径,这意味着正在应用正确的 WSGIProcessGroup 指令。因此,问题似乎是 ScriptAlias 冲突。是否可以让这个别名也成为正则表达式以确保 /foo... 不匹配 /?