Apacheでリバースプロキシを設定する場合は、ProxyPass と ProxyPassReverse を使用します。
しかし実際には
- すべてのアクセスを1台へ転送したい
- サブドメインごとに転送先を変えたい
- URLパスごとに転送先を変えたい
など構成によって設定方法が異なります。
本記事では、Apacheの mod_proxy を利用した代表的な3つの構成パターンを設定例付きで解説します。
環境・前提条件
本記事では、以下の環境を前提に解説します。
- OS:Linux
- Webサーバー:Apache HTTP Server
- モジュール:mod_proxy、mod_proxy_http
モジュールについて:
mod_proxy はリバースプロキシ機能を提供する基本モジュールです。
HTTP/HTTPSへの転送には mod_proxy_http を使用します。
記述する設定内容は、主に /etc/httpd/conf/httpd.conf(または conf.d/ 配下の任意の設定ファイル)に書き込むことを想定しています。
利用するプロトコルによっては、mod_proxy_ajp や mod_proxy_wstunnel など別のモジュールが必要になる場合があります。
また、リバースプロキシの設定は
- VirtualHostごとの設定ファイル
- conf.d
- sites-available(Debian系)
など様々な場所で設定することがあります。
パターン①:すべて同じサーバーへ転送する
もっともシンプルな構成で、受け取ったリクエストをすべて1台のサーバーへ転送します。
リバースプロキシのみをインターネットへ公開し、バックエンドサーバーはプライベートネットワーク内に配置する構成でよく利用されます。

設定例
ProxyPass / http://192.168.1.10/
ProxyPassReverse / http://192.168.1.10/
仕組み
アクセスされたドメイン名やURLパスに関係なく、すべてのリクエストを 192.168.1.10 へそのまま送ります。
メリットと利用例
Webサーバーの隠蔽: 本番Webサーバーを直接インターネットに晒さず、リバースプロキシの裏に隠すことでセキュリティを高められます。
入口の一本化: WAF(Webアプリケーションファイアウォール)やSSL証明書の設定をリバースプロキシ側に集約できます。
パターン②:ホスト名で分岐する
1台のリバースプロキシで、アクセスされたドメイン名(ホスト名)によって転送先のサーバーを切り替える方法です。

例:
portal.example.com → 192.168.1.10
admin.example.com → 192.168.1.20
このように、サブドメインによって転送先を変える場合に使用します。
設定例
<VirtualHost *:80>
ServerName portal.example.com
ProxyPass / http://192.168.1.10/
ProxyPassReverse / http://192.168.1.10/
</VirtualHost>
<VirtualHost *:80>
ServerName admin.example.com
ProxyPass / http://192.168.1.20/
ProxyPassReverse / http://192.168.1.20/
</VirtualHost>
仕組み
ユーザーがブラウザでリクエストしたホスト名(HTTPヘッダーのHost情報)を判定し、該当するVirtualHostブロックの設定に従って転送先を決定します。
メリットと利用例
- グローバルIPの節約: パブリックIPアドレスが1つしかなくても、複数ドメインのWebサービスを公開できます。
- 役割に応じたサーバー分散: 社員ポータル、管理画面、APIサーバーなどをサブドメイン単位で物理的に別々のサーバーへ分離できます。
パターン③:パスで分岐する
同じドメイン宛てのアクセスであっても、URLの「パス」によって転送先を別々のサーバーへ割り振る方法です。

例:
example.com/pdf/ ➔ 192.168.1.10/pdf/ (PDF生成サーバー)
example.com/api/ ➔ 192.168.1.30/api/ (API処理サーバー)
設定例
ProxyPass /pdf/ http://192.168.1.10/pdf/
ProxyPassReverse /pdf/ http://192.168.1.10/pdf/
ProxyPass /api/ http://192.168.1.30/api/
ProxyPassReverse /api/ http://192.168.1.30/api/
転送元と転送先の末尾にある / は、必ず記述を一致させてください。片方だけスラッシュが抜けていると、example.com/pdfへのアクセスが 192.168.1.10/pdfpdf のような意図しないURLへ転送され、404エラーなどの原因になります。
仕組み
URLパス(例:/api/ や /pdf/)を判定して転送先を決定します。
メリットと利用例
1つのサイトに見えるシームレスな構成: ユーザーからは1つのWebサイト(ドメイン)に見えますが、裏側では機能ごとにサーバーを分離できます。
高負荷機能の分散: 画像処理やPDF出力、API通信など、負荷の高い特定の処理だけを別スペックのサーバーに逃がすことが可能です。
【必須】セキュリティ設定:オープンプロキシ化を防ぐ
リバースプロキシを設定する際は、意図せず外部からの踏み台攻撃に利用されないよう、オープンプロキシ化を防ぐ設定が必要です。
Apacheの設定で以下を指定します。
ProxyRequests Off
ProxyRequests On にしてしまうと、自サーバーが「フォワードプロキシ」として機能してしまい、悪意ある第三者にインターネットへのアクセス用プロキシとして悪用される危険があります。リバースプロキシとして運用する場合は、必ず ProxyRequests Off になっているか確認しましょう。
どれを選べばいい?
| 構成 | 向いているケース |
|---|---|
| すべて同じサーバーへ転送 | Webサーバーを外部公開したくない場合 |
| ホスト名で分岐 | サブドメインごとにサービスを分けたい場合 |
| パスで分岐 | APIや画像処理など機能ごとにサーバーを分けたい場合 |
注意点
ProxyPass と ProxyPassReverse は基本的にセットで記述します。
ProxyPass はリクエストを転送し、ProxyPassReverse はサーバーから返るリダイレクト応答(Locationヘッダなど)のURLを書き換えるために必要 です。
パスの末尾の「/」の有無によって転送先が変わる場合があるため、設定例に合わせて記述しましょう。
設定変更後は 構文エラーがないことを確認しApache を再起動します。
#構文チェック
apachectl configtest
#再起動
systemctl reload httpd
まとめ
Apacheのリバースプロキシは、ProxyPass と ProxyPassReverse を利用することで柔軟に構成できます。
- すべてのアクセスを1台へ転送
- ホスト名ごとに転送
- URLパスごとに転送
という3つの構成を理解しておくと、多くのシステム構成に対応できます。
設定後は configtest で構文を確認し、動作確認まで行うことをおすすめします。