WSGI を使用して同じサーバーから 2 つの django プロジェクトを提供しようとしていますが、1 つを example.com/ (app1 と呼びましょう) から実行し、もう 1 つを example.com/foo/ (app2) から実行する必要があります。Graham のコメントhereで説明されているように、個別のデーモン プロセスでこれを設定しようとしましたが、パスの 1 つが他のパスのサブディレクトリである場合は機能しないようです。example.com/foo/... に対するすべてのリクエストは、まだ app1 によって処理されています。
2 つのプロジェクトを 1 つに結合する必要なく (これは難しい作業です)、探しているものを達成する方法はありますか?
これは、現在サイト構成にあるものです。
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>
アップデート:
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:
エラー ログをさらに調べたところ、/foo/... への要求は app1 の wsgi.py ファイルによって処理されているように見えますが、app2 の python パスを使用しているため、正しい WSGIProcessGroup ディレクティブが適用されています。したがって、問題は ScriptAlias の衝突にあるようです。/foo... が / に一致しないことを確認するために、このエイリアスを正規表現にすることは可能ですか?