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として処理しています。
半年前のアンケートとかでスコアの高かったモノをまとめた
— りょうご (@Ryogo_PL) April 28, 2025
『ちびキャラ用 コスチューム素材プラグイン Vol.4』を
公開しておきましたhttps://t.co/Rm9dts90Gx pic.twitter.com/CgfbKVUhUg
昔描いたイラストをマイブームな画風で描き直してみたシリーズ pic.twitter.com/jNxnKCyMsn
— りょうご (@Ryogo_PL) November 12, 2023
昔描いた 東方イラスト をマイブームな画風で描き直してみたシリーズ pic.twitter.com/AV9PMOWa5c
— りょうご (@Ryogo_PL) July 9, 2022

