Apache:ProxyPass ディレクティブ
技術ドキュメント目次 -> Apache -> ProxyPass ディレクティブ本技術ドキュメントは、2002~2004年頃に作成したものが多いです。
内容が古くなっていることもあるかと思いますが、ご了承ください。
【低価格SSL証明書】弊社運営の低価格SSL証明書販売サイト、翌月末払いなど請求書払いも可能。
◆ はじめに
ProxyPassディレクティブを用いることで、俗に 逆プロクシ などと呼ばれているような動作を実装することができます。
具体的には、
リクエストを受け付けた Apache(下の Server A)が、
他サーバー(下の Server B)に proxy 接続して、
他サーバーから取得したコンテンツをクライアントに返します。
(クライアントからは、他サーバーの存在が見えません。)
1. クライアントが、Server A にアクセスする。
2. Server A は、自分のマシン内のファイルを参照せずに、
Server B に Proxy接続する。
3. Server B は、自分のマシン内のファイルを参照し、
コンテンツを Server A に返す。
4. Server A が、3.で取得したコンテンツをクライアントに返す。
(クライアントからは、Server B の存在が見えません。)
+--------+ 1---> +----------+ 2---> +----------+
| CLIENT | | Server A | | Server B |
+--------+ <---4 +----------+ <---3 +----------+
なお、
ProxyPassディレクティブを使用するには、
mod_proxy が組み込まれている必要があります。
インストールの際、configure のオプションで、mod_proxyを有効にしておきましょう。
◆ 設定例
ProxyPass /ok24/ http://www.ok24.jp/ |
上記の1行を httpd.conf に追加するだけで、
ProxyPass の設定は基本的には完了です。
ブラウザを立ち上げて、
http://(設定を行ったマシン)/ok24/
にアクセスすると、 http://www.ok24.jp/ のコンテンツが表示されます。
動作として面白いと思いますので、
ぜひ、動作確認してみてください。
◆ ProxyPassReverse
ProxyPassReverse ディレクティブを用いることで、ProxyPass にリダイレクトに関する制御を追加できます。
ProxyPass /ok24/ http://www.ok24.jp/ ProxyPassReverse /ok24/ http://www.ok24.jp/ |
上記のように、ProxyPass の指定に ProxyPassReverse を追加することで、
http://www.ok24.jp/ 内の CGIスクリプトなどが、
Location: のヘッダを出力してリダイレクトを行ったとき、
Location: ヘッダ内に含まれるホスト名を書きかえ、
クライアントに Proxy先のマシンのホスト名が見えないように制御することができます。
◆ 絶対パスでのリンクの問題
非常に有用な ProxyPassディレクティブですが、Proxy先のマシン内のコンテンツが絶対パスでのリンクを行っていたときに、
少々の問題が発生する可能性があります。
ProxyPass /ok24/ http://www.ok24.jp/ |
たとえば、上記のように設定していたときに、
http://www.ok24.jp/tech.html のコンテンツ内のリンクに、
<a href="/">トップページ</a> というものがあったとします。
ユーザーが、
http://(ユーザーから見えるホスト名)/ok24/tech.html
にアクセスして、
リンクをクリックすると、
http://(ユーザーから見えるホスト名)/
へジャンプしてしまうため、
ProxyPass の対象にならなくなってしまいます。
ですので、
そのような使い方をするときには、動作確認を慎重に行いましょう。
■ Apache についての他のドキュメント
- インストール
- htpasswd コマンド
- .htで始まるファイル(ちょっとしたメモ)
- Apache Bench(パフォーマンス測定)
- CGIのnphスクリプト
- ErrorDocument ディレクティブ
- ProxyPass ディレクティブ
- Redirect ディレクティブ
- mod_asisモジュール
- mod_perlモジュール
■ 他のグループのドキュメント
Apache / Linux / FreeBSD / OpenSSL / Perl / HTTPプロトコル / Jakarta Tomcat / Java / NetBSD / Oracle / PostgreSQL / UNIX の C言語 / UNIX のコマンド / Windows / bind / システム運用TIPS