我想从使用WSGI的同一服务器提供两个django项目,但要求从example.com/运行一个(我们称之为app1),另一个来自示例.com/foo /(app2)。我试着用Graham的评论here中描述的单独的守护进程来设置它,但是当其中一个路径是另一个路径的子目录时,这似乎不起作用。所有对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替代的位置,试图在每次请求是没有的路径尝试首先将/ foo委托给app1,然后委托给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:
在错误日志中寻找进一步之后,它看起来像请求/富/ ...正在处理通过app1的wsgi.py文件,但使用app2的python路径,这意味着正在应用正确的WSGIProcessGroup指令。因此,问题似乎是ScriptAlias碰撞。是否有可能使这个别名是一个正则表达式,以确保/ foo ...不匹配/?
这看上去一切正常:
这种特定排序问题进行了说明。你已经三次检查你的路径中的复制粘贴错误,并重新启动Apache两次以获得好的度量? – Enrico
是的,非常确定一切都应该如此,但app1仍然优先(在编辑之前的配置中)。 – Tiki