Access: 2104681
p-lux.net Ver.10.00 by Ryogo
Apache でリバースプロキシを導入したので備忘録
■はじめに

リバースプロキシとは、クライアントからのリクエストを一度受け取り、別のサーバへ転送してその結果を返す仕組みのことです。

見た目上は「同じドメイン」にアクセスしているように見えますが、
内部的には別サーバで処理させることができます。

今回の想定は下記です。
・現サーバ(フロント)
・新サーバ(バックエンド)

今回は例として、 /reverse_proxy_test/ だけを新サーバへ転送します。



■ 現サーバ(フロント側)の設定

まずはSSL終端を行う現サーバ側の設定です。

<VirtualHost *:443>
ServerName p-lux.net
DocumentRoot /var/www/p-lux.net/

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/p-lux.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/p-lux.net/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/p-lux.net/chain.pem

<Location "/reverse_proxy_test/">
# 元の Host ヘッダをバックエンドへ渡す
ProxyPreserveHost On
# X-Forwarded-For などのヘッダを自動付与
ProxyAddHeaders On
# 指定パスを新サーバへ転送
ProxyPass "http://NEW_SERVER_IP/reverse_proxy_test/"
ProxyPassReverse "http://NEW_SERVER_IP/reverse_proxy_test/"
</Location>

</VirtualHost>

※ NEW_SERVER_IP は新サーバのIPアドレスに置き換えること。
※ mod_proxy / mod_proxy_http が有効になっていることが前提です。



■ 新サーバ(バックエンド側)の設定

新サーバ側は通常のVirtualHost設定に加え、
リバースプロキシ経由のIPを正しく取得する設定を行います。

<VirtualHost *:80>
ServerName p-lux.net
DocumentRoot /var/www/html/p-lux.net/public/

RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy OLD_SERVER_IP
</VirtualHost>

※ OLD_SERVER_IP は現サーバのIPアドレス。

転送するだけなら、この設定はやらなくても動きますが、
これをやっておかないと、新サーバ側は全てのアクセスを旧サーバのIPとして判断してしまいます。
ログの保存やアクセス判定など、なにかとやっておかないと不便なので、この設定は行うことを強く推奨します。

余談ですが、なぜ RemoteIPTrustedProxy で旧サーバのIPだけ信用するようにしているのかと言うと、
これをしないと、ユーザがヘッダ情報を好きに送りつけて、好きなIPとなりすましてアクセスできてしまうためです。
例えば、せっかく自分のIPだけしか入れないページを作っても、ユーザはIPを誤魔化して侵入できてしまうわけです。
そのため、RemoteIPTrustedProxy で許可したIP(今回の場合、旧サーバ)からの情報だけを正規のIPとして処理しています。

© 2003-2026 p-lux.net, Ryogo.

ページトップへ