apache vhost 上的多个 django 应用程序,其中一个位于根目录 mod_wsgi
multiple django apps on a apache vhost where one is on root with mod_wsgi
类似这样:
Deploying multiple django apps on Apache with mod_wsgi
我正在尝试在 mod_wsgi 上托管两个 Django 应用程序,但其中一个在 root 上。即 WSGI 指令将是
WSGIScriptAlias / <path to django wsgi file for app1>
WSGIScriptAlias /app2 <path to django wsgi file for app2>
像这样只使用 WSGIScript 别名似乎行不通。我尝试将它们放在位置指令中,但这也不起作用。有办法实现吗?
在 Graham 的下面回答之后我尝试了这个:
<VirtualHost <server ip>:80>
ServerName site1.com
##### app2 CONFIG
WSGIDaemonProcess app2 python-path=/<path to django app2>/:/<path to virtualenv app2>/ threads=15 display-name=%{GROUP}
WSGIProcessGroup app2
WSGIScriptAlias /app2 /<path to app2 wsgi file>/
##### app1 CONFIG
WSGIDaemonProcess app1 python-path=/<path to django app1>/:/<path to virtualenv app1>/ threads=15 display-name=%{GROUP}
WSGIProcessGroup app1
WSGIScriptAlias / /<path to app1 wsgi file>
</VirtualHost>
但不幸的是,对 site1 的请求。com/app2 仍然由 Django 应用程序 app1 处理。我是不是配置有误?
顺序错误。使用:
WSGIScriptAlias /app2 <path to django wsgi file for app2>
WSGIScriptAlias / <path to django wsgi file for app1>
嵌套最深的必须在最前面,否则 '/' 将首先匹配并覆盖其他所有内容。
更新 1
补充问题后。现在使用:
<VirtualHost <server ip>:80>
ServerName site1.com
##### app2 CONFIG
WSGIDaemonProcess app2 python-path=/<path to django app2>/:/<path to virtualenv app2>/ threads=15 display-name=%{GROUP}
<Location /app2>
WSGIProcessGroup app2
</Location>
WSGIScriptAlias /app2 /<path to app2 wsgi file>/
##### app1 CONFIG
WSGIDaemonProcess app1 python-path=/<path to django app1>/:/<path to virtualenv app1>/ threads=15 display-name=%{GROUP}
WSGIProcessGroup app1
WSGIScriptAlias / /<path to app1 wsgi file>
</VirtualHost>
您需要将 WSGIProcessGroup
指令的范围限定到子 URL,以便只有子 URL 的请求被委托给 mod_wsgi 守护进程组。
上面的另一种写法是:
<VirtualHost <server ip>:80>
ServerName site1.com
##### app2 CONFIG
WSGIDaemonProcess app2 python-path=/<path to django app2>/:/<path to virtualenv app2>/ threads=15 display-name=%{GROUP}
WSGIScriptAlias /app2 /<path to app2 wsgi file>/ process-group=app2
##### app1 CONFIG
WSGIDaemonProcess app1 python-path=/<path to django app1>/:/<path to virtualenv app1>/ threads=15 display-name=%{GROUP}
WSGIScriptAlias / /<path to app1 wsgi file> process-group=app1
</VirtualHost>
换句话说,使用 process-group
选项 WSGIScriptAlias
来指示每个应该 运行.
当使用守护进程模式且每个进程只有一个应用程序时,还建议添加:
WSGIApplicationGroup %{GLOBAL}
这会强制 WSGI 应用程序在各自的进程中使用主要的 Python 解释器上下文,避免在某些 Python 具有 C 扩展的包未正确实现以使用 Python副翻译。
类似这样: Deploying multiple django apps on Apache with mod_wsgi
我正在尝试在 mod_wsgi 上托管两个 Django 应用程序,但其中一个在 root 上。即 WSGI 指令将是
WSGIScriptAlias / <path to django wsgi file for app1>
WSGIScriptAlias /app2 <path to django wsgi file for app2>
像这样只使用 WSGIScript 别名似乎行不通。我尝试将它们放在位置指令中,但这也不起作用。有办法实现吗?
在 Graham 的下面回答之后我尝试了这个:
<VirtualHost <server ip>:80>
ServerName site1.com
##### app2 CONFIG
WSGIDaemonProcess app2 python-path=/<path to django app2>/:/<path to virtualenv app2>/ threads=15 display-name=%{GROUP}
WSGIProcessGroup app2
WSGIScriptAlias /app2 /<path to app2 wsgi file>/
##### app1 CONFIG
WSGIDaemonProcess app1 python-path=/<path to django app1>/:/<path to virtualenv app1>/ threads=15 display-name=%{GROUP}
WSGIProcessGroup app1
WSGIScriptAlias / /<path to app1 wsgi file>
</VirtualHost>
但不幸的是,对 site1 的请求。com/app2 仍然由 Django 应用程序 app1 处理。我是不是配置有误?
顺序错误。使用:
WSGIScriptAlias /app2 <path to django wsgi file for app2>
WSGIScriptAlias / <path to django wsgi file for app1>
嵌套最深的必须在最前面,否则 '/' 将首先匹配并覆盖其他所有内容。
更新 1
补充问题后。现在使用:
<VirtualHost <server ip>:80>
ServerName site1.com
##### app2 CONFIG
WSGIDaemonProcess app2 python-path=/<path to django app2>/:/<path to virtualenv app2>/ threads=15 display-name=%{GROUP}
<Location /app2>
WSGIProcessGroup app2
</Location>
WSGIScriptAlias /app2 /<path to app2 wsgi file>/
##### app1 CONFIG
WSGIDaemonProcess app1 python-path=/<path to django app1>/:/<path to virtualenv app1>/ threads=15 display-name=%{GROUP}
WSGIProcessGroup app1
WSGIScriptAlias / /<path to app1 wsgi file>
</VirtualHost>
您需要将 WSGIProcessGroup
指令的范围限定到子 URL,以便只有子 URL 的请求被委托给 mod_wsgi 守护进程组。
上面的另一种写法是:
<VirtualHost <server ip>:80>
ServerName site1.com
##### app2 CONFIG
WSGIDaemonProcess app2 python-path=/<path to django app2>/:/<path to virtualenv app2>/ threads=15 display-name=%{GROUP}
WSGIScriptAlias /app2 /<path to app2 wsgi file>/ process-group=app2
##### app1 CONFIG
WSGIDaemonProcess app1 python-path=/<path to django app1>/:/<path to virtualenv app1>/ threads=15 display-name=%{GROUP}
WSGIScriptAlias / /<path to app1 wsgi file> process-group=app1
</VirtualHost>
换句话说,使用 process-group
选项 WSGIScriptAlias
来指示每个应该 运行.
当使用守护进程模式且每个进程只有一个应用程序时,还建议添加:
WSGIApplicationGroup %{GLOBAL}
这会强制 WSGI 应用程序在各自的进程中使用主要的 Python 解释器上下文,避免在某些 Python 具有 C 扩展的包未正确实现以使用 Python副翻译。