Apache は Web サーバーとしてだけでなく、バックエンドサービスへ転送するリバースプロキシとしても使えます。
この記事では、Apache の基本設定と TLS 設定が終わっている前提で、ProxyPass、ProxyPassReverse、X-Forwarded-Proto、アクセス制限、WAF 除外の考え方を整理します。
リバースプロキシの用途
- 外部からの HTTPS を Apache で受け、内部サービスへ転送する
- 複数サービスをパスや VirtualHost で振り分ける
- 管理画面だけ接続元 IP を制限する
- WAF や TLS 終端を Apache 側に集約する
必要なモジュールを有効化する
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel
sudo a2enmod headers基本設定例を作る
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Forwarded-Proto https
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://backend.example.local/
ProxyPassReverse / http://backend.example.local/HTTPS 用 include に配置する
sudo tee /etc/apache2/https-custom-config.d/app-reverse-proxy.conf >/dev/null <<'EOF'
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Forwarded-Proto https
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://backend.example.local/
ProxyPassReverse / http://backend.example.local/
EOF管理画面の接続元を制限する
アプリケーションの管理画面は、Apache 側で接続元 IP を制限すると防御層を増やせます。
<Location /wp-admin>
<RequireAny>
Require ip 192.0.2.0/24
Require ip 2001:db8::/32
</RequireAny>
</Location>
<Location /wp-login.php>
<RequireAny>
Require ip 192.0.2.0/24
Require ip 2001:db8::/32
</RequireAny>
</Location>WebSocket を扱う場合
WebSocket を使うサービスでは proxy_wstunnel を有効にし、必要に応じて ws:// または wss:// の転送を追加します。
ProxyPass /socket ws://backend.example.local/socket
ProxyPassReverse /socket ws://backend.example.local/socket設定を検証して反映する
sudo apache2ctl -t
sudo apache2ctl -S
sudo systemctl restart apache2動作確認する
curl -k -I https://127.0.0.1/
sudo tail -n 50 /var/log/apache2/error.log
sudo tail -n 50 /var/log/apache2/access.logWAF と組み合わせる場合
WAF と組み合わせる場合、バックエンドアプリの正常な POST、JSON、管理 API が誤検知されることがあります。必要な場合は URI と rule ID を絞って除外します。
まとめ
Apache リバースプロキシでは、ProxyPass だけでなく、ProxyPreserveHost、X-Forwarded-Proto、接続元制限、WebSocket、WAF 除外まで含めて設計します。TLS と WAF の土台があると、公開サービスの入口として扱いやすくなります。
Ubuntu 26.04 Apache リバースプロキシの設定


