更新:以下で2つの答えを試してみて、改訂された質問を追加しました。
こんにちは、
これを読んでいるなら、おそらくApacheのmod_proxyとそのProxyPass関数に精通しているでしょう。他の多くの人と同じように、内部ネットワークの外部からアクセスできるアプリケーションがあるという問題がありますが、そのアプリケーション自体が別のマシン上の他の内部アプリにアクセスします。この設定でリモートアクセスに入ると、状況が不安定になります。
だから、私のセットアップは非常に簡単です、私は持っています:
マシン#1でリモートアクセスが有効になっています。ホスト名を使用してアクセスすると、PHPアプリケーションが実行されています。
マシン#2はDjangoを実行する新しいアプリケーションであり、完全に異なるバックエンド(authも含む)を使用し、別のマシンでホストされています。イントラネットでは、基本的に内部192.168.0.101 ipにリンクする単純な名前のホスト名を介してアクセスします。
ProxyPassを試して設定してみました。たとえば、/ newへのパスで新しいアプリケーションに送信されます。
ProxyPass/new http://192.168.0.101/
この種の機能は、他のアプリへのリクエストを取得しますが、私のDjangoアプリが/ auth/login /にリダイレクトすることを望んでいるため、即座に認識しないため、ブレークします。変更した場合私自身のURLはfoo.net/new/auth/loginです。ログインページが表示されますが、ブラウジング全体でこれを行うのは不便です。
では、ProxyPassを希望どおりに機能させるにはどうすればよいですか? Apacheで何かをする必要があるので、他のアプリでは常にURLの前に/ newが書き込まれますか、それともDjangoアプリ内で変更する必要がありますか?
ヒントやポインタも同様にいただければ幸いです。御時間ありがとうございます
Djangoアプリケーションが/ auth/loginではなく/ new/auth/loginにあることを期待するように変更する必要があります。通常、プロキシパスは次のようになります。
ProxyPass /path http://192.168.0.101/path
ProxyPassReverse /path http://192.168.0.101/path
Djangoアプリが/ new /にあることを期待している)と組み合わせると、問題が解決するはずです。
ProxyPassReserveディレクティブを使用して問題を解決できると思います。あなたはそれについて読むことができます ここ 。
VirtualHostを使用します。たとえば、サーバーのA名(例sub.external.com)をサーバーIP(例123.456.678)
セキュリティ上の理由により、settings.pyでProxyPassを使用する場合は、HTTP_Hostを明示的に転送する必要があります チケット#688 ごとに:
USE_X_FORWARDED_Host = True
次に、以下をApache/ etc/httpd/httpd.confに追加します。
# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf
VirtualHostを/ etc/httpd/extra/httpd-vhosts.confに追加します。
NameVirtualHosts *:80
<VirtualHost *:80>
ServerName sub.external.com
ProxyPass / http://127.0.0.1:8000/
</VirtualHost>
これで、「パス」を気にすることなく http://sub.external.com からサイトにアクセスできるようになります。
お返事ありがとうございます。これを試してからいくつかの修正が必要なので、私は自分の質問に答えています。
まず、App#2が実行されます http://192.168.0.101 ..実行されません http://192.168.0.101/path したがって、ProxyPassは作業
そのため、ircの#Apacheの人たちと話した後、次のようなことをする必要があることがわかりました。
RewriteCond%{HTTP_Host} ^ app2.myremotedns.com *
RewriteRule。* http://192.168.0.101/ [P]
これにより、app2.myremotedns.comへのすべてのリクエストがプロキシ経由で内部IPに送信されるように、書き換えルールが送信されます。
これは多少機能しますが、3つの問題があります。
すべてのページでログインが必要な場合、app2でリモートから何かにアクセスすると、/ auth/loginにリダイレクトされます。ただし、現在の書き換え設定により、Firefoxがパスの試行を停止する前にリダイレクトループが発生します。これはDjangoのリダイレクトメソッドと関係があるかもしれませんが、よくわかりません。
ログインを無効にすると、ページは機能しますが、完全には機能しません。 App#2のインデックスページを取得できるようですが、他には何もありません。
静的メディアはすべて壊れていますが、これはおそらく単純な修正であり、現在は心配されていません。
だから、私は想像したより複雑な問題を抱えています... :)
本当に学習したい場合は、リバースプロキシのこの段階的な例を読んでください。