5

Django アプリを開発し、メインの PHP ベースのサイトと同じサーバーから提供する方法についての元のDjango サービス提供に関する質問からのフォローアップの質問があります (静的および PHP 駆動型のウェブサイトからの私のウェブサイトの大規模な移行のすべての部分)。一連の Django アプリに)。

提供されたネーム サーバー ソリューションをまったく使用できず、代わりに mod_wsgi を使用して Django アプリケーションを別のポート (8000) にデプロイしました。しかしここで、実際に Django アプリケーションをメイン サイトに統合する必要があります。私の Apache 2.0 構成ファイル (たとえばhttp://www.example.com ) に、次の ProxyPass コマンドを追加しました (mod_wsgi の初期化後)。

ProxyPass        /app/newsletter     http://www.example.com:8000/app/newsletter
ProxyPassReverse /app/newsletter     http://www.example.com:8000/app/newsletter

ここで、リクエストは次のことを期待しています。

http://www.example.com/app/newsletter

正常にプロキシされます:

http://www.example.com:8000/app/newsletter

そして、すべてが世界でうまくいくでしょう。

しかし、そうではありません。Apache が 5 分ほど (この質問を作成するのにかかった時間) ハングし、 502 Proxy Errorを吐き出します。

Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /app/newsletter/.

Reason: Error reading from remote server

この応答の後に Apache 2.0 エラー ログを見ると、次のような継続的なエラーが表示されます。

[Thu Sep 27 15:25:49 2012] [error] Exception KeyError: KeyError(****,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored

そのため、mod_proxy が Django や Python とどのように連携するかについて、何かが見落とされているようです。ProxyPass と ProxyPassReverse を使用する他の Java 関連プロセスがあり、正常に動作します。また、ProxyPass を適用しようとしない場合、Django アプリはすべて正常に動作します (つまり、ポート 8000 で直接アドレス指定した場合)。

何か案は?私がやっていることは特に複雑だとは思いません。

前もって感謝します。

4

1 に答える 1

3

結局、mod_rewriteを使用することが解決策でした。これをApacheのhttpd.confファイルに追加しました。

RewriteEngine On
RewriteRule ^/app/newsletter/(.*)$ http://%{SERVER_NAME}:8000%{REQUEST_URI} [P]

すべてが期待どおりに機能します。

于 2012-09-28T16:14:43.160 に答える