ProxyPassの使用方法を教えてください


11

更新:以下の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で何かをする必要があるので、他のアプリでは常に/ newの前に/ newが書き込まれますか、それともDjangoアプリ内で変更する必要がありますか?

ヒントやポインタも同様にいただければ幸いです。御時間ありがとうございます

回答:


11

/ auth / loginの代わりに/ new / auth / loginにあるように、djangoアプリケーションを変更する必要があります。通常、プロキシパスは次のようになります。

ProxyPass /path http://192.168.0.101/path
ProxyPassReverse /path http://192.168.0.101/path

/ new /にあることを期待しているDjangoアプリと組み合わせると、問題が解決するはずです。


2

VirtualHostを使用します。たとえば、サーバーのA名(例:sub.external.com)をサーバーIP(例:123.456.678)に設定します。

セキュリティ上の理由により、settings.pyでProxyPassを使用する場合はチケット#6880ごとにHTTP_HOSTを明示的に転送する必要があります

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からサイトにアクセスできるようになります。


1

お返事ありがとうございます。これを試してからいくつかの修正が必要なので、私は自分の質問に答えています。

まず、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のインデックスページを取得できるようですが、他には何もありません。

  • 静的メディアはすべて壊れていますが、これはおそらく簡単な修正です..現在、心配されていません。

だから、私は想像したより複雑な問題を抱えています... :)


デフォルト以外のdjango構成を使用すると、多くの問題が発生します。:最近、ちょっと私のブログ上のジャンゴとはProxyPassと別の問題が解決しfromzerotocodehero.blogspot.com/2011/01/...を

1
これについて何か解決策を見つけましたか?私は特になど、メディアのスタイルを失うことで、正確に同じ問題を抱えている
membersound
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.