サーバを安全にするまで
このモジュールは Apache のプロキシ/ゲートウェイ機能を実装しています。
AJP13
(Apache JServe Protocol version 1.3),
FTP
, CONNECT
(SSL 用),
HTTP/0.9
, HTTP/1.0
, HTTP/1.1
のプロキシ機能を実装しています。これらのプロトコルやその他のプロトコル用の
プロキシ機能を持った、他のモジュールに接続するようにも設定できます。
Apache のプロキシ機能は
これに加えて、他のモジュールによって拡張機能が提供されています。
キャッシュは SSLProxy*
ディレクティブで
提供されています。これらの機能を利用するためには、該当するモジュールを
組み込んで設定しなければなりません。
Apache はフォワードプロキシとしても、 リバースプロキシとしても設定することができます。
通常のフォワードプロキシはクライアントと
オリジンサーバ
フォワードプロキシの一般的な使用方法は、ファイアウォールによって
制限されている内部のクライアントにインターネットへのアクセスを
提供するものです。フォワードプロキシはネットワークの使用量を
減らすために (
フォワードプロキシは
一方リバースプロキシは、クライアントには普通の ウェブサーバのように見えます。クライアント側に特別な設定は必要ありません。 クライアントはリバースプロキシの名前空間に対して通常のコンテンツへの リクエストを行ないます。プロキシはリクエストをどこに送れば良いかを判定し、 あたかも自分自身がオリジンサーバであったかのようにクライアントに コンテンツを返します。
リバースプロキシのよくある利用方法は、インターネットユーザに ファイアウォールの中にあるサーバにアクセスを与えるというものです。 リバースプロキシは複数のバックエンドサーバへ負荷分散をするために 使ったり、遅いバックエンドエンドサーバのためにキャッシュ機能を提供したり するために使えます。また、リバースプロキシは複数のサーバを 同じ URL 空間にまとめるために使うこともできます。
リバースプロキシは [P]
フラグを使うことで有効になります。リバースプロキシの
設定のために
以下の例は手始めの簡単な例です。個々のディレクティブの意味は それぞれの説明をお読みください。
またキャッシュ機能を有効にしたい場合は、
プロキシのアクセスは以下のように
アクセス制御のためのディレクティブのより詳しい情報は
(ProxyRequests Off
にして
イントラネットにある Apache プロキシサーバは外部へのリクエストを
会社のファイアウォールを通して送らなければなりません。(このためには
個々の scheme についてそれぞれ、ファイアウォールの
プロキシにフォワードされるように
イントラネット内のユーザは WWW のリクエストでローカルドメインを
省略することがよくあります。http://somehost.example.com/
というリクエストの代わりに "http://somehost/" をリクエストしたりします。
このようなリクエストを受け付け、サーバに設定されているローカルドメインが
暗黙のうちに使われていると解釈して、単純にリクエストを処理するものも
商用プロキシサーバの中にはあります。
サーバが プロキシのサービス用に設定されていて
Keepalive や HTTP/1.1 を適切に実装していないアプリケーションサーバに対して
force-proxy-request-1.0
と proxy-nokeepalive
がその環境変数です。
POST メソッドなどのリクエストには、リクエストボディがあります。
HTTP プロトコル仕様によると、ボディのあるリクエストは chunked
転送を使うか、Content-Length
ヘッダを送信しなければなりません。
このようなリクエストをオリジンサーバに送信する場合、
Content-Length
を送ろうと試みます。しかし。ボディが大きく、オリジナルのリクエストで
chunked 転送が使われている場合、上流へのリクエストに
chunked 転送も使われます。
この挙動は 環境変数で制御できます。
proxy-sendcl
を設定すると、可能な限り常に
Content-Length
を付与して、
上流サーバに送信するようになります。
逆に proxy-sendchunked
を設定すると、リソース消費を抑え、
chnked エンコードを使って送信するようになります。
Documentation not yet translated. Please see English version of document.
例えば、次の設定は yournetwork.example.com
の
ホストにのみプロキシサーバを経由したアクセスを許可します:
次の例は example.com
の foo
ディレクトリの
すべてのファイルに対して、プロキシサーバを通して送られたときには
INCLUDES
フィルタを通して送るように設定します:
IsError
Ignore
StartBody
このオプションが有効になっている場合、
このオプションは通常は Off
に設定してください。
ほとんどの場合、これは大量の名前ベースのバーチャルホスティングを行なっていて、
元々の Host ヘッダをバックエンドサーバが解釈する必要のあるときのような、
特別な設定が必要な場合にのみ有用です。
これは Apache のフォワードプロキシサーバとしての動作を
有効もしくは無効にします。(ProxyRequests を Off
に
設定しても、
通常のリバースプロキシの設定では、このオプションは Off
に設定してください。
HTTP や FTP サイトへのプロキシの機能を有効にしたい場合は、
サーバを安全にするまで
このディレクティブはこのプロキシに対するリモートプロキシを定義します。
match はリモートサーバがサポートする URL スキーム、
リモートサーバが使うはずの URL の一部分、サーバがすべての
リクエストに使われることを示す *
のどれかになります。
remote-server はリモートサーバの部分 URL です。構文:
scheme は実際上リモートサーバとの通信に使われるプロトコルを
決定します。このモジュールでは http
だけがサポートされて
います。
この例では、プロキシは FTP リクエストを別の HTTP リクエストで包んで そのようなリクエストを扱える別のプロキシに転送します。
このオプションはリバースプロキシの設定もサポートします。 サーバが別のフォワードプロキシの後ろに隠されている場合でも バックエンドウェブサーバをバーチャルホストの URL 空間に入れることが できます。
Documentation not yet translated. Please see English version of document.
Documentation not yet translated. Please see English version of document.
このディレクティブはリモートサーバをローカルサーバの名前空間に マップできるようにします。ローカルサーバは通常の意味でのプロキシと しては動作せず、リモートサーバのミラーとして振る舞います。 path はローカルの仮想パスの名前です。url は リモートサーバの部分 URL になり、クエリー文字列を含むことはできません。
ローカルサーバのアドレスが http://example.com/
であると
します。すると、
と設定すると http://example.com/mirror/foo/bar
への
リクエストが内部的に http://backend.example.com/bar
への
プロキシリクエストに変換されることになります。
サブディレクトリをリバースプロキシしたくないときに !
は
役に立ちます。例えば、
は /mirror/foo/i
を除く
/mirror/foo
へのすべてのリクエストを
backend.example.com
にプロキシします。
順番は重要です。一般的な
2.1 の機能で、バックエンドサーバとの接続にプールされたコネクションを
使えるようになりました。key=value
形式のパラメータで
このコネクションプーリングの調整ができます。Hard Maximum
のデフォルト値は、有効になっている MPM でのプロセス当たりのスレッド数と
同じ数のコネクション数です。prefork MPM では通常は 1 で、worker MPM では
min
の設定で、バックエンドサーバとの間に何本のコネクションを
常時開くかが決まります。Soft Maximum smax
の数に
達するまで必要に応じてコネクションは生成されます。smax
を超えた数のコネクションは、生存時間 ttl
で切断されます。
バックエンドサーバと Hard Maximum max
の数以上のコネクションを
生成することはありません。
パラメータ | デフォルト値 | 説明 |
---|---|---|
min | 0 | バックエンドサーバとの接続で 常に開いているコネクション数の最小値 |
max | 1...n | バックエンドサーバとの接続数の Hard Maximum
|
smax | max | 接続数の Soft Maximum smax を超えた数のコネクションは生存時間 ttl
で切断されます。
|
ttl | - | smax 数を超えた非活動状態のコネクションの生存時間を、
秒で指定します。この期間内に使用されなかったコネクションは、
全て閉じられます。
|
timeout | コネクションタイムアウトを秒で指定します。特に指定されなければ、
フリーなコネクションを取得できるまで待ちます。このディレクティブは
max パラメータと合わせて使うことで、バックエンドサーバとの
接続数を制御するのに使います。
| |
acquire | - | 設定すると、コネクションプールからフリーのコネクションを取得するために
待機する待ち時間の最大値になります。フリーのコネクションがプールになかった場合は、
SERVER_BUSY ステータスがクライアントに返されます。
|
keepalive | Off | バックエンドサーバと Apache の間にファイアーウォールがある場合には、
このパラメータを使ってください。ファイアウォールは往々にして、
非活動状態のコネクションを落とそうとします。
このフラグは OS に指示して、KEEP_ALIVE メッセージを非活動状態の
コネクションでも送るようにします (間隔は OS のグローバル設定に依存し、
通常は 120ms 間隔) 。これによってファイアウォールによってコネクションが
落とされることを防げます。keepalive を有効にするには、このプロパティを
On にしてください。
|
retry | 60 | コネクションをプーリングするための、リトライのタイムアウトを秒で 指定します。バックエンドサーバへのコネクションプーリングが失敗した場合は、 タイムアウトの期間が過ぎるまで、そのサーバにリクエストをフォワードしません。 この機能を使うと、バックエンドサーバをメンテナンスのためにシャットダウンし、 後でオンラインに復帰させるといったことができます。 |
loadfactor | 1 | ワーカーあたりの負荷係数です。BalancerMember で使います。 1 から 100 までの数字でそのワーカーに対する正規化された負荷率を指定します。 |
route | - | ロードバランサで使った場合、ワーカーのルーティングをします。 ルートはセッション ID に付加された値になります。 |
redirect | - | ワーカーのリダイレクション経路です。この値は通常は、 安全にクラスタからノードを取り去る設定を動的に入れるために使います。 セッション ID の無いリクエスト全てを指定した場合は、 この値と同じルーティングパラメータを持つ BalancerMember にリダイレクトされます。 |
Proxy ディレクティブのスキームが balancer://
になっている場合は、
バックエンドサーバと実際には通信しない仮想ワーカーが生成されます。
このワーカーは幾つかの "本物の" ワーカーの管理をつかさどります。
この場合パラメータは、この仮想ワーカーに対して設定されます。
パラメータ | デフォルト値 | 説明 |
---|---|---|
lbmethod | - | Balancer のロードバランス方法。使用するロードバランスの
スケジューリング方法を選びます。処理したリクエストの数で重み付けする
byrequests か、転送量のバイト数で重み付けする
bytraffic を設定できます。デフォルトは
byrequests です。
|
stickysession | - | バランサーのスティッキーセッション名です。通常はこの値は JSESSIONID
や PHPSESSIONID といったものになりますが、この値は
バックエンドアプリケーションのサポートするセッションに依存します。
|
nofailover | Off | On になっていると、ワーカーがエラーを起こしたり
無効になっている場合にセッションが切れます。
バックエンドサーバがセッションレプリケーションをサポートしていない場合は、
On にしてください。
|
timeout | 0 | バランサーのタイムアウトを秒で指定します。 この値を設定すると、フリーのワーカーを取得するまでの最大待機時間になります。 デフォルトでは待機しません。 |
maxattempts | 1 | フェイルオーバーを試みる最大の回数を指定します。 |
より柔軟なリバースプロキシの設定が必要な場合は、[P]
フラグ付きの
Documentation not yet translated. Please see English version of document.
Documentation not yet translated. Please see English version of document.
このディレクティブは Apache に HTTP リダイレクト応答の
Location
, Content-Location
, URI
ヘッダの調整をさせます。これは、Apache がリバースプロキシとして使われている
ときに、リバースプロキシを通さないでアクセスすることを防ぐために
重要です。これによりバックエンドサーバの HTTP リダイレクトが
リバースプロキシとバックエンドの間で扱われるようになります。
ディレクティブで明示されている HTTP 応答ヘッダのみが書き換えられます。 Apache は他の応答ヘッダを書き換えたり、HTML ページの中の URL 参照を 書き換えたりすることはありません。HTML の中を見て、URL 参照を書き換える モジュールに Nick Kew さんの mod_proxy_html があります。
path はローカル仮想パスの名前です。url は
リモートサーバの部分 URL です。これらは
例えば、ローカルサーバのアドレスが http://example.com/
だとします。すると
という設定をすると、http://example.com/mirror/foo/bar
へのローカルリクエストが http://backend.example.com/bar
へのプロキシリクエストに内部でリダイレクトされるだけではありません
(これは ProxyPass
の機能です)。backend.example.com
が送るリダイレクトの面倒もみます。http://backend.example.com/bar
が http://backend.example.com/quux
にリダイレクトされたとき、
Apache は HTTP リダイレクト応答をクライアントに送る前に、
http://example.com/mirror/foo/quux
に変更します。
URL を構成するのに使われるホスト名は
RewriteRule ... [P]
) と併せて使用することができます。
使用法は基本的に
Set-Cookie
ヘッダの
domain
文字列を書き換えます。
使用法は基本的に
Set-Cookie
ヘッダの
path
文字列を書き換えます。
CONNECT
できるかを指定するCONNECT
メソッドが接続を許可するポート番号のリストを指定します。
今日のブラウザは、https
コネクションが要求されていて、
HTTP 上でのプロキシによるトンネリングができるときに、
このメソッドを使います。
デフォルトの設定では、https のデフォルトポート (443
) と
デフォルトの snews ポート (563
) が有効になっています。
このデフォルトを上書きして、リストに記載したポートにのみ接続を許可したい場合、
CONNECT
を使用するには、
rocky.wotsamattau.edu
が IP アドレスで参照されたときでも
マッチします。
wotsamattau.edu
のマッチには wotsamattau
だけでも十分です。
はすべてのサイトへの接続をブロックすることに注意してください。
512
以上か、システムのデフォルトのバッファ
サイズを意味する 0
でなければなりません。
8192
以下でなければなりません。
ほとんどすべての場合、この値を変更する理由はありません。
Max-Forwards
ヘッダが指定されていない場合に
リクエストが通過可能なプロキシの最大数を設定します。これは
プロキシの無限ループや DoS 攻撃を防ぐために設定されています。
このディレクティブはイントラネット中の Apache プロキシサーバにのみ
有用です。
Domain は先頭にピリオドの着いた部分 DNS ドメイン名です。 同一 DNS ドメイン及びゾーン (すなわち、ホスト名の末尾がすべて Domain で終わっているということ) に属するホストのリストを 表します)。
Domain を Hostname と区別するために (意味的にも構文的にも。DNS ドメインも DNS の A レコードを持つことができるのです!)、Domain は 常にピリオドで始まります。
ドメイン名の比較は大文字小文字を区別せずに行なわれ、Domain
は常に DNS ツリーのルートから始まるものとみなされます。ですから、
次の二つのドメイン .MyDomain.com
と
.mydomain.com.
(最後のピリオドに注目) は同一であると
みなされます。ドメインの比較は DNS ルックアップなしで行なわれるため、
サブネットの比較よりもずっと効率的です。
SubNet は数値形式 (ドットで区切られた四つの数字) の 部分インターネットアドレスです。後にスラッシュと Subnet の意味のあるビット数を指定するネットマスクとを続けることができます。 共通のネットワークインタフェースを使って到達することのできるサブネットを 表すために使われます。明示的にネットマスクを指定しない場合は 最後の省略された (もしくは値が 0 の) 数字がマスクを指定します。 (この場合は、ネットマスクは 8 ビット単位でしか指定できません。) 例:
192.168
もしくは 192.168.0.0
255.255.0.0
というネットマスクの形式で使われることも
あります)192.168.112.0/21
192.168.112.0/21
と 21 ビット有効な
ネットマスク (255.255.248.0
という形式で使われることも
あります)特別な場合に、32 ビット有効な SubNet は IPAddr と同等で、 0 ビット有効な SubNet (例えば、0.0.0.0/0) は すべての IP アドレスにマッチする定数 _Default_ と同じです。
IPAddr は数値形式 (ドットで区切られた四つの数字) の 完全インターネットアドレスです。通常はこのアドレスはホストを 表しますが、必ずしもアドレスに対応する DNS ドメイン名があるわけでは ありません。
IPAddr は DNS システムにより解決される必要がないので、 apache の性能が向上するかもしれません。
Hostname は DNS ドメインサービスにより一つもしくは 複数の IPAddr に解決可能な 完全な DNS ドメイン名です。これは (Domain と違って、説明は上記を参照) 論理的なホストを表し、少くとも一つの IPAddr (もしくは違う IPAddr のホストのリスト) に解決 されなければなりません)。
多くの場合、Hostname の代わりに IPAddr を指定した方が、DNS ルックアップを 避けることができるため、効率が良くなります。Apache の名前解決は ネームサーバへの接続が遅い PPP 上の場合などにかなり時間を取られる ことがあります。
Hostname の比較は大文字小文字を区別せずに行なわれ、
Hostname は常に DNS ツリーのルートから始まるものとみなされます。
ですから、二つのドメイン WWW.MyDomain.com
と
www.mydomain.com.
(最後のピリオドに注目) は同一であると
みなされます。
このディレクティブはユーザがプロキシリクエストのタイムアウトを
指定できるようにします。これはハングしてしまう遅い、もしくは挙動の
怪しいサーバがあり、サーバがデータを返すまでひたすら待ち続けるよりも
タイムアウトを返してより緩やかに
このディレクティブはイントラネット内の Apache プロキシサーバにのみ
有用です。
Via
HTTP 応答ヘッダ
により提供される情報このディレクティブはプロキシの Via:
HTTP ヘッダの使用を
制御します。想定されている使い方は、プロキシサーバがいくつも繋がっているときに
プロキシリクエストの流れを制御することです。Via:
ヘッダ行の
説明は RFC 2616 (HTTP/1.1)
の 14.45 節を読んでください。
Off
に設定されていると、特別な処理は
行なわれません。リクエストやリプライに Via:
ヘッダがあれば、
変更されずにそのまま渡します。On
に設定されていれば、各リクエストとリプライに
Via:
行が追加されます。Full
に設定されていれば、Via:
ヘッダは
コメント部分に Apache サーバのバージョンも含むようになります。Block
に設定されていれば、すべてのプロキシリクエストから
Via:
ヘッダが取り除かれます。新たに Via:
が
生成されることはありません。このディレクティブはリバースプロキシを使用していて、
エンドユーザに送られるエラーページの外見を共通のものにしたいときに
有用です。このディレクティブは (