Apache/リバースプロキシ

提供:maruko2 Note.
移動: 案内, 検索

目次

Apache モジュール

mod_proxy
HTTP プロキシ/ゲートウェイサーバ
mod_proxy_connect
mod_proxy も必要。HTTP メソッドの CONNECT をサポートする。CONNECT リクエストは SSL トンネリングに使われる。
mod_proxy_http
mod_proxy も必要。HTTP と HTTPS のリクエストをプロキシするための機能を提供する。キャッシュ機能はないため、キャッシュさせるには mod_cache を使う必要がある。
mod_proxy_ftp
mod_proxy も必要。FTP サイトをプロキシするのに必要。

リバースプロキシの設定ディレクティブ

ProxyRequests
ProxyRequests On|Off
フォワードプロキシを有効にする。
デフォルト: ProxyRequests Off
ProxyPass
ProxyPass [path] !|url [ley=value key=value ...]]
リモートサーバをローカルサーバの URL 空間にマップする。
path はローカルの仮想パスの名前で、url はリモートサーバの URL を記述する。
ProxyPassReverse
ProxyPassReverse [path] url
リバースプロキシされたバックエンドサーバから送られた HTTP 応答ヘッダの URL を調整する。

設定例

リバースプロキシのみを使う(フォワードプロキシを使わない)場合は ProxyRequests Off にしておく。

ProxyRequests Off
ProxyPass /cgi-bin/foo http://www.example.com/cgi-bin/foo
ProxyPassReverse /cgi-bin/foo http://www.example.com/cgi-bin/foo

Location コンテナ内に記述する場合

設定例

<Location> コンテナ内に記述する場合は、ローカルの仮想パスを記述しない。

ProxyRequests Off
<Location "/cgi-bin/foo">
	ProxyPass http://www.example.com/cgi-bin/foo
	ProxyPassReverse http://www.example.com/cgi-bin/foo
</Location>

ProxyPassReverse の例

バックエンドサーバをローカルのアドレスで指定

リバースプロキシとバックエンドサーバの関係
ProxyPass /foo http://192.168.0.1/foo
ProxyPassReverse /foo http://192.168.0.1/foo

バックエンドサーバのログ設定

バックエンドサーバのログには、クライアントのアドレスが記録されず、リバースプロキシからのアクセスが記録されるようになる。 例えば、リバースプロキシのIPアドレスが 192.168.1.1 だとすると、バックエンドサーバのログには 192.168.1.1 からアクセスがあったとして記録される。

これは、Apache の ログフォーマットがリモートホストのアドレスを記録するように定義しているため。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

バックエンドサーバではリモートホストのアドレスではなく、mod_proxy が付加した HTTP リクエストヘッダの X-Forwarded-For を記録するようにすれは、リモートホストのアドレスを記録するようになる。

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" reverse-proxy
CustomLog logs/reverse-proxy.log reverse-proxy

参考ページ

Apache 関連のページ

LINEで送る このエントリーをはてなブックマークに追加
個人用ツール
名前空間
変種
表示
操作
案内
ツールボックス

注目のページ

このサイトのはてなブックマーク数