Apache HTTP サーバ バージョン 2.4
説明: | HTTP/1.1 プロキシ/ゲートウェイサーバ |
---|---|
ステータス: | Extension |
モジュール識別子: | proxy_module |
ソースファイル: | mod_proxy.c |
サーバを安全にするまで ProxyRequests
は有効にしないでください。
オープンプロキシサーバはあなた自身のネットワークにとっても、
インターネット全体にとっても危険です。
このモジュールは Apache のプロキシ/ゲートウェイ機能を実装しています。
AJP13
(Apache JServe Protocol version 1.3),
FTP
, CONNECT
(SSL 用),
HTTP/0.9
, HTTP/1.0
, HTTP/1.1
のプロキシ機能を実装しています。これらのプロトコルやその他のプロトコル用の
プロキシ機能を持った、他のモジュールに接続するようにも設定できます。
Apache のプロキシ機能は mod_proxy
の他に、
いくつかのモジュールに分割されています:
mod_proxy_http
, mod_proxy_ftp
,
mod_proxy_ajp
, mod_proxy_balancer
,
mod_proxy_connect
です。ですから、
特定のプロキシの機能を使いたい場合は、mod_proxy
と
該当するモジュールをサーバに (コンパイル時に静的に行なうか
LoadModule
で動的に読み込むかして)
組み込む必要があります。
これに加えて、他のモジュールによって拡張機能が提供されています。
キャッシュは mod_cache
と関連モジュールで
提供されています。SSL/TLS で遠隔サーバに接続する機能は
mod_ssl
の SSLProxy*
ディレクティブで
提供されています。これらの機能を利用するためには、該当するモジュールを
組み込んで設定しなければなりません。
Apache はフォワードプロキシとしても、 リバースプロキシとしても設定することができます。
通常のフォワードプロキシはクライアントと オリジンサーバ (訳注: コンテンツ生成元のサーバ) の間に位置する中間サーバです。 オリジンサーバからコンテンツを取得する過程では、クライアントは 行き先としてオリジンサーバを指定しつつプロキシにリクエストを送り、 プロキシはオリジンサーバからコンテンツ取得のリクエストを送り、 コンテンツが取得できればそれをクライアントに返します。 クライアントが他のサイトにフォワードプロクシ経由でアクセスするには、 特別にそれ用の設定をしなければなりません。
フォワードプロキシの一般的な使用方法は、ファイアウォールによって
制限されている内部のクライアントにインターネットへのアクセスを
提供するものです。フォワードプロキシはネットワークの使用量を
減らすために (mod_cache
で提供されている)
キャッシュ機能を用いることもできます。
フォワードプロキシは ProxyRequests
ディレクティブで
有効になります。フォワードプロキシでは、クライアントは本当の身元を
隠して任意のサイトにアクセスできるようになるため、フォワードプロキシを
有効にする前に、承認されたクライアントのみがプロキシにアクセスできるように
サーバを安全にすることが重要です。
一方リバースプロキシは、クライアントには普通の ウェブサーバのように見えます。クライアント側に特別な設定は必要ありません。 クライアントはリバースプロキシの名前空間に対して通常のコンテンツへの リクエストを行ないます。プロキシはリクエストをどこに送れば良いかを判定し、 あたかも自分自身がオリジンサーバであったかのようにクライアントに コンテンツを返します。
リバースプロキシのよくある利用方法は、インターネットユーザに ファイアウォールの中にあるサーバにアクセスを与えるというものです。 リバースプロキシは複数のバックエンドサーバへ負荷分散をするために 使ったり、遅いバックエンドエンドサーバのためにキャッシュ機能を提供したり するために使えます。また、リバースプロキシは複数のサーバを 同じ URL 空間にまとめるために使うこともできます。
リバースプロキシは ProxyPass
ディレクティブや
RewriteRule
ディレクティブの
[P]
フラグを使うことで有効になります。リバースプロキシの
設定のために ProxyRequests
を設定する必要は
ありません。
以下の例は手始めの簡単な例です。個々のディレクティブの意味は それぞれの説明をお読みください。
またキャッシュ機能を有効にしたい場合は、mod_cache
の説明を読んでください。
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Deny from all
Allow from internal.example.com
</Proxy>
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
プロキシのアクセスは以下のように <Proxy>
コンテナの中に
ディレクティブを書くことで制御できます:
<Proxy *>
Order Deny,Allow
Deny from all
Allow from 192.168.0
</Proxy>
アクセス制御のためのディレクティブのより詳しい情報は
mod_authz_host
をお読みください。
(ProxyRequests
ディレクティブを
使って) フォワードプロキシを設定している場合は、厳しくアクセス
制限を行なうことが非常に大切です。そうしないと、任意のクライアントが
身元を明かすことなく任意のホストにアクセスするためにサーバを使うことが
できてしまいます。これはあなた自身のネットワークにとっても、インターネット
全体にとっても危険なことです。(ProxyRequests Off
にして
ProxyPass
ディレクティブを使って)
リバースプロキシを使っている場合には、クライアントはあなたが明示的に
設定したホストにしかアクセスできないため、フォワードプロキシのとき
ほどアクセス制御に力を注がなくても大丈夫です。
ProxyBlock
ディレクティブを使っている場合、
後のテストのために起動時にホストの
IP アドレスが調べられてキャッシュされます。ホスト名のルックアップの
速さによっては、数秒 (かそれ以上) かかるかもしれません。
イントラネットにある Apache プロキシサーバは外部へのリクエストを
会社のファイアウォールを通して送らなければなりません。(このためには
個々の scheme についてそれぞれ、ファイアウォールの
プロキシにフォワードされるように
ProxyRemote
ディレクティブを
設定してください)。しかしイントラネット内のリソースにアクセスするときは、
ファイアウォールを通さないでもアクセスできます。
どのホストがイントラネットに属し、直接アクセスすべきかを指定するには、
NoProxy
ディレクティブが
役に立ちます。
イントラネット内のユーザは WWW のリクエストでローカルドメインを
省略することがよくあります。http://somehost.example.com/
というリクエストの代わりに "http://somehost/" をリクエストしたりします。
このようなリクエストを受け付け、サーバに設定されているローカルドメインが
暗黙のうちに使われていると解釈して、単純にリクエストを処理するものも
商用プロキシサーバの中にはあります。
サーバが