Apache mod_proxyで実現するリバースプロキシの設定と活用法【完全ガイド】

mod_proxyを使ったApacheのリバースプロキシ設定は、Webサーバーの柔軟性とパフォーマンスを向上させる重要な技術です。リバースプロキシは、クライアントからのリクエストを受け取り、バックエンドサーバーに転送する役割を担います。これにより、ロードバランシング、キャッシュ、SSLターミネーションなどの機能を簡単に実装できます。

本記事では、リバースプロキシの基本概念をはじめ、Apacheでmod_proxyを使ってリバースプロキシを構築する手順、セキュリティの強化方法、SSL対応、負荷分散の実装方法について詳しく解説します。さらに、複数ドメインを振り分ける応用例も紹介し、実践的な知識を深めていただけます。

これから紹介する設定は、Webサーバーの可用性やスケーラビリティを高める上で欠かせない技術であり、多くのシステム管理者やWeb開発者にとって役立つ内容です。Apacheを使ってリバースプロキシを構築し、Webサービスの効率を最大限に引き出しましょう。

目次
  1. リバースプロキシの基本概念と仕組み
    1. リバースプロキシの役割
    2. 正引きプロキシとの違い
    3. リバースプロキシの仕組み
  2. mod_proxyのインストールと有効化手順
    1. インストールの確認
    2. インストール手順
    3. Ubuntu / Debian 系
    4. CentOS / RHEL 系
    5. モジュールの有効化
    6. 動作確認
  3. 基本的なリバースプロキシ設定例
    1. シンプルなリバースプロキシの構成
    2. 設定のポイント解説
    3. 設定の反映とApacheの再起動
    4. 動作確認
    5. トラブルシューティング
  4. セキュリティ強化のための設定ポイント
    1. 不正なアクセスを防ぐためのアクセス制御
    2. HTTPヘッダーの隠蔽
    3. バックエンドサーバーのIPアドレスを隠す
    4. リクエストサイズの制限
    5. プロキシへの直接アクセスを防止
    6. クロスサイトスクリプティング(XSS)対策
    7. 設定の反映と確認
  5. SSL対応リバースプロキシ設定
    1. 必要なモジュールの有効化
    2. SSL証明書の取得
    3. SSL対応の仮想ホスト設定
    4. 設定のポイント解説
    5. HTTPからHTTPSへのリダイレクト
    6. 設定の反映とテスト
    7. 証明書の自動更新
  6. 負荷分散のためのプロキシバランサー設定
    1. 必要なモジュールの有効化
    2. 基本的なプロキシバランサーの設定
    3. 設定のポイント解説
    4. 負荷分散方式の選択
    5. ヘルスチェックと障害サーバーの自動除外
    6. 管理インターフェースの追加
    7. 設定の反映とテスト
    8. まとめ
  7. アクセスログとデバッグ方法
    1. アクセスログの設定
    2. エラーログの重要性と活用方法
    3. ログレベルの調整
    4. プロキシトラブルシューティング
    5. 特定のトラブル事例と対処法
    6. 動作確認とデバッグの反映
  8. 実践的な応用例:複数ドメインの振り分け設定
    1. 構成例
    2. 仮想ホスト設定
    3. 設定のポイント解説
    4. SSL対応の追加
    5. ワイルドカード証明書を使用する場合
    6. 複数ドメインの動的振り分け
    7. 設定の確認と反映
    8. 動作確認
    9. トラブルシューティング
    10. まとめ
  9. まとめ

リバースプロキシの基本概念と仕組み


リバースプロキシとは、クライアントからのリクエストを受け取り、適切なバックエンドサーバーに転送する役割を持つプロキシサーバーの一種です。通常の「フォワードプロキシ」とは異なり、リバースプロキシはサーバーサイドで動作し、クライアントには直接バックエンドサーバーが見えません。

リバースプロキシの役割


リバースプロキシには以下のような役割があります。

  • 負荷分散:複数のバックエンドサーバーにリクエストを分散し、負荷を均等化します。
  • キャッシュ:バックエンドサーバーのレスポンスをキャッシュし、クライアントへの応答速度を向上させます。
  • セキュリティ強化:外部から直接バックエンドサーバーへのアクセスを防ぎ、不正アクセスやDDoS攻撃からサーバーを保護します。
  • SSLターミネーション:クライアントからのSSL通信をリバースプロキシが処理し、バックエンドサーバーはHTTP通信のみで負担を軽減します。

正引きプロキシとの違い


正引きプロキシ(フォワードプロキシ)は、クライアントのリクエストを代理でインターネットに送信する役割を持ちます。一方、リバースプロキシはサーバー側で動作し、クライアントのリクエストをバックエンドサーバーに転送します。

  • フォワードプロキシ:クライアントが外部サイトにアクセスする際に使う
  • リバースプロキシ:外部クライアントが特定のサーバーにアクセスする際に使う

リバースプロキシの仕組み


クライアントがWebサイトにアクセスする際、リバースプロキシはそのリクエストを受け取ります。そして、条件に応じて適切なバックエンドサーバーに転送し、レスポンスをクライアントに返します。これにより、クライアントはリバースプロキシを介して間接的にバックエンドサーバーと通信します。

以下は基本的なリバースプロキシのフローです。

クライアント → リバースプロキシ(Apache) → バックエンドサーバー  

リバースプロキシは、システムのスケーラビリティを向上させ、バックエンドのリソースを最適化するための重要な技術です。次章では、このリバースプロキシをApacheで実装するための具体的な手順を解説します。

mod_proxyのインストールと有効化手順


Apacheでリバースプロキシを構築するには、mod_proxyモジュールをインストールし、有効化する必要があります。mod_proxyはApacheの標準モジュールであり、リバースプロキシやフォワードプロキシの機能を提供します。

インストールの確認


mod_proxyは多くのLinuxディストリビューションではデフォルトでインストールされています。以下のコマンドでmod_proxyがすでにインストールされているか確認します。

apachectl -M | grep proxy

結果としてproxy_moduleが表示されれば、mod_proxyはインストールされています。表示されない場合は、次の手順でインストールを行います。

インストール手順

Ubuntu / Debian 系

sudo apt update
sudo apt install libapache2-mod-proxy-html

CentOS / RHEL 系

sudo yum install mod_proxy

または

sudo dnf install mod_proxy

モジュールの有効化


mod_proxyを有効にするには、Apacheの設定でモジュールをロードします。UbuntuやDebianでは次のコマンドで有効化できます。

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo systemctl restart apache2

CentOSやRHELではhttpd.confを直接編集します。

sudo vi /etc/httpd/conf/httpd.conf

以下の行を追加またはコメントアウトを解除します。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

変更後はApacheを再起動します。

sudo systemctl restart httpd

動作確認


インストールと有効化が完了したら、再度以下のコマンドでmod_proxyが有効であることを確認します。

apachectl -M | grep proxy

proxy_moduleおよびproxy_http_moduleが表示されていれば準備完了です。

次のセクションでは、具体的なリバースプロキシの設定方法について詳しく説明します。

基本的なリバースプロキシ設定例


mod_proxyのインストールと有効化が完了したら、実際にApacheでリバースプロキシを設定してみましょう。ここでは、最も基本的なリバースプロキシの設定方法を解説します。

シンプルなリバースプロキシの構成


以下の例では、Apacheがフロントエンドとして動作し、バックエンドのWebアプリケーションサーバー(例: http://localhost:8080)にリクエストを転送します。

設定例


Apacheの仮想ホスト設定ファイル(例: /etc/apache2/sites-available/000-default.conf)を編集します。

sudo vi /etc/apache2/sites-available/000-default.conf

以下の設定を追加します。

<VirtualHost *:80>
    ServerName www.example.com

    ProxyRequests Off
    ProxyPreserveHost On

    # リバースプロキシ設定
    <Location />
        ProxyPass http://localhost:8080/
        ProxyPassReverse http://localhost:8080/
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

設定のポイント解説

  • ProxyRequests Off: フォワードプロキシとして動作しないようにします。リバースプロキシ専用の設定です。
  • ProxyPreserveHost On: クライアントが送信したホストヘッダをバックエンドにそのまま渡します。これにより、バックエンドサーバーはリクエストの正しいホストを認識できます。
  • ProxyPass: クライアントからのリクエストを指定したバックエンドサーバーに転送します。
  • ProxyPassReverse: バックエンドサーバーからのレスポンスをクライアントに返す際に、リバースプロキシが適切にホスト名を書き換えます。これにより、リダイレクトなどが正しく機能します。

設定の反映とApacheの再起動


設定を反映させるために、Apacheを再起動します。

sudo systemctl restart apache2

動作確認


ブラウザで http://www.example.com にアクセスし、バックエンドのサーバー(http://localhost:8080)が表示されることを確認します。

トラブルシューティング


もし設定がうまく動作しない場合は、以下のファイルを確認してください。

tail -f /var/log/apache2/error.log


エラーログに記録されたメッセージを元に、設定を見直します。

次のセクションでは、セキュリティを強化するための設定方法について解説します。

セキュリティ強化のための設定ポイント


リバースプロキシは外部からのリクエストを直接受けるため、不適切な設定ではセキュリティリスクが高まります。mod_proxyを使ったリバースプロキシの設定では、セキュリティを確保するための対策を講じることが重要です。ここでは、代表的なセキュリティ設定を解説します。

不正なアクセスを防ぐためのアクセス制御


特定のIPアドレスのみからリバースプロキシへのアクセスを許可する設定を行います。

<VirtualHost *:80>
    ServerName www.example.com

    ProxyRequests Off
    ProxyPreserveHost On

    <Location />
        ProxyPass http://localhost:8080/
        ProxyPassReverse http://localhost:8080/

        # アクセス制御設定
        Require ip 192.168.1.0/24
        Require all denied
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


設定のポイント

  • Require ip: 指定したIPアドレス範囲(例: 192.168.1.0/24)からのアクセスのみ許可します。
  • Require all denied: 上記以外のアクセスを拒否します。

HTTPヘッダーの隠蔽


Apacheがサーバー情報を露出することを防ぎます。

ServerTokens Prod
ServerSignature Off

設定のポイント

  • ServerTokens Prod: レスポンスヘッダーで「Apache」だけを表示し、バージョン情報を隠します。
  • ServerSignature Off: エラーページなどでApacheのバージョン情報が表示されるのを防ぎます。

バックエンドサーバーのIPアドレスを隠す


リバースプロキシ経由でのバックエンドサーバーのIPアドレスが漏れないようにします。

<VirtualHost *:80>
    ServerName www.example.com

    ProxyRequests Off
    ProxyPreserveHost On

    <Location />
        ProxyPass http://localhost:8080/
        ProxyPassReverse http://localhost:8080/
        Header unset Server
        Header unset X-Powered-By
    </Location>
</VirtualHost>

設定のポイント

  • Header unset Server: サーバー情報をレスポンスヘッダーから削除します。
  • Header unset X-Powered-By: 使用している技術スタックの情報を隠します。

リクエストサイズの制限


悪意のあるリクエストによるDoS攻撃を防ぐため、リクエストサイズを制限します。

LimitRequestBody 1024000

設定のポイント

  • LimitRequestBody: リクエストボディの最大サイズを1MB(1024000バイト)に制限します。必要に応じて調整します。

プロキシへの直接アクセスを防止


プロキシサーバーへの直接アクセスを防ぎ、外部からのリクエストを制限します。

ProxyRequests Off
<Proxy *>
    Require all denied
</Proxy>

設定のポイント

  • ProxyRequests Off: フォワードプロキシ機能を無効化します。
  • Require all denied: すべてのプロキシリクエストを拒否します。

クロスサイトスクリプティング(XSS)対策


セキュリティヘッダーを追加して、XSS攻撃を防止します。

Header set X-Content-Type-Options nosniff
Header set X-Frame-Options DENY
Header set Content-Security-Policy "default-src 'self'"

設定のポイント

  • X-Content-Type-Options: コンテンツタイプのスニッフィングを防ぎます。
  • X-Frame-Options: フレーム内でのページ表示を禁止します。
  • Content-Security-Policy: スクリプトやスタイルの読み込みを制限します。

設定の反映と確認


設定変更後、Apacheを再起動して反映させます。

sudo systemctl restart apache2

これらのセキュリティ設定により、リバースプロキシの脆弱性を軽減し、攻撃からサーバーを保護することができます。次のセクションでは、SSLを使用した安全な通信の設定について説明します。

SSL対応リバースプロキシ設定


リバースプロキシを運用する際、クライアントとリバースプロキシ間の通信を暗号化することは、セキュリティ強化に不可欠です。SSL/TLSを設定することで、データの盗聴や改ざんを防ぎます。ここでは、Apache mod_proxyでSSL対応のリバースプロキシを構築する手順を解説します。

必要なモジュールの有効化


SSL通信を実現するには、Apacheでmod_sslを有効にする必要があります。

sudo a2enmod ssl
sudo systemctl restart apache2

CentOS/RHEL系では以下のコマンドで有効化します。

sudo yum install mod_ssl
sudo systemctl restart httpd

SSL証明書の取得


SSL証明書はLet’s Encryptなどの無料証明書や、有料の証明書を利用できます。
Let’s Encryptを使う場合は以下のコマンドで取得可能です。

sudo apt install certbot python3-certbot-apache
sudo certbot --apache

証明書取得後、自動でApacheのSSL設定が行われます。

SSL対応の仮想ホスト設定


既存の仮想ホスト設定にSSL対応のセクションを追加します。

<VirtualHost *:443>
    ServerName www.example.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    ProxyRequests Off
    ProxyPreserveHost On

    <Location />
        ProxyPass http://localhost:8080/
        ProxyPassReverse http://localhost:8080/
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

設定のポイント解説

  • SSLEngine on: SSLエンジンを有効化します。
  • SSLCertificateFile: SSL証明書のパスを指定します。
  • SSLCertificateKeyFile: SSL証明書の秘密鍵を指定します。
  • ProxyPass/ProxyPassReverse: 通常のHTTPと同様にバックエンドサーバーへのリクエストを転送します。

HTTPからHTTPSへのリダイレクト


HTTPアクセスを強制的にHTTPSへリダイレクトします。

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / https://www.example.com/
</VirtualHost>

設定の反映とテスト


設定を反映させるためにApacheを再起動します。

sudo systemctl restart apache2


ブラウザで https://www.example.com にアクセスし、証明書の有効性と通信の暗号化が確認できれば設定完了です。

証明書の自動更新


Let’s Encryptの証明書は90日ごとに期限が切れるため、自動更新を設定します。

sudo certbot renew --dry-run


自動更新が問題なく動作するか確認し、スケジュール設定(cronジョブ)を行います。

sudo crontab -e
0 3 1 * * /usr/bin/certbot renew --quiet

これにより、SSL証明書が定期的に更新され、HTTPS接続が常に維持されます。
次のセクションでは、負荷分散を実現するmod_proxy_balancerの設定について解説します。

負荷分散のためのプロキシバランサー設定


Apacheのmod_proxy_balancerを使用すると、複数のバックエンドサーバーへのリクエスト分散が可能になります。これにより、システムの耐障害性が向上し、リクエストの負荷を複数のサーバーに分散させることができます。本セクションでは、mod_proxy_balancerを用いた負荷分散の設定手順を解説します。

必要なモジュールの有効化


mod_proxy_balancerを利用するには、以下のモジュールを有効にする必要があります。

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo systemctl restart apache2

CentOS/RHEL系では次のコマンドで有効化します。

sudo yum install mod_proxy_balancer
sudo systemctl restart httpd

基本的なプロキシバランサーの設定


以下は、2つのバックエンドサーバーにリクエストを分散させる設定例です。

<VirtualHost *:80>
    ServerName www.example.com

    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy balancer://mycluster>
        BalancerMember http://192.168.1.10:8080
        BalancerMember http://192.168.1.11:8080
    </Proxy>

    ProxyPass / balancer://mycluster/
    ProxyPassReverse / balancer://mycluster/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

設定のポイント解説

  • ProxyPreserveHost On: クライアントのホストヘッダーがそのままバックエンドに渡されます。
  • BalancerMember: バランサーグループmyclusterに複数のバックエンドサーバーを登録します。
  • ProxyPass / balancer://mycluster/: クライアントからのリクエストをmyclusterに振り分けます。
  • ProxyPassReverse: バックエンドサーバーからのレスポンスをクライアントに適切に返します。

負荷分散方式の選択


負荷分散方式はlbmethodで変更できます。以下の例では、リクエストごとにサーバーを切り替える方式(byrequests)を指定しています。

<Proxy balancer://mycluster>
    BalancerMember http://192.168.1.10:8080
    BalancerMember http://192.168.1.11:8080
    ProxySet lbmethod=byrequests
</Proxy>

主な負荷分散方式

  • byrequests: リクエスト数で振り分け(デフォルト)。
  • bytraffic: トラフィック量で振り分け。
  • bybusyness: 最もリクエストが少ないサーバーに振り分け。

ヘルスチェックと障害サーバーの自動除外


障害が発生したバックエンドサーバーを自動的に除外するように設定できます。

<Proxy balancer://mycluster>
    BalancerMember http://192.168.1.10:8080 retry=10
    BalancerMember http://192.168.1.11:8080 retry=10 status=-I
</Proxy>
  • retry=10: サーバー障害発生後10秒後に再試行します。
  • status=-I: 初期状態でサーバーを無効化し、手動で有効化できます。

管理インターフェースの追加


Apacheには、バランサーの状態をリアルタイムで監視・制御できる管理インターフェースがあります。

<Location /balancer-manager>
    SetHandler balancer-manager
    Require ip 192.168.1.0/24
</Location>
  • SetHandler balancer-manager: バランサーマネージャーを有効にします。
  • Require ip: 指定したIPアドレスのみアクセスを許可します。

管理画面には次のURLでアクセスします。

http://www.example.com/balancer-manager

設定の反映とテスト


設定を保存し、Apacheを再起動します。

sudo systemctl restart apache2


ブラウザでhttp://www.example.comにアクセスし、負荷分散が正常に動作することを確認します。複数のリロードで異なるバックエンドサーバーにリクエストが振り分けられることを確認できます。

まとめ


mod_proxy_balancerを活用することで、Apacheは簡単に負荷分散機能を提供できます。障害時の自動切り替えやトラフィックの適切な分散により、可用性とパフォーマンスが向上します。次のセクションでは、アクセスログとデバッグ方法について解説します。

アクセスログとデバッグ方法


リバースプロキシを運用する際、問題が発生した場合に迅速に対応できるように、適切なログ設定とデバッグ方法を理解しておくことが重要です。アクセスログはクライアントからのリクエストの記録を残し、エラーログは障害や不具合の原因を特定する手助けとなります。

アクセスログの設定


Apacheではデフォルトでアクセスログが記録されますが、リバースプロキシ固有の情報を追加して、より詳細なログを取得することができます。

仮想ホストにカスタムログを設定

<VirtualHost *:80>
    ServerName www.example.com

    ProxyRequests Off
    ProxyPreserveHost On

    <Location />
        ProxyPass http://localhost:8080/
        ProxyPassReverse http://localhost:8080/
    </Location>

    # アクセスログのカスタマイズ
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    CustomLog ${APACHE_LOG_DIR}/proxy_access.log combined
    ErrorLog ${APACHE_LOG_DIR}/proxy_error.log
</VirtualHost>

ポイント解説

  • LogFormat: クライアントのIPアドレス、リクエスト内容、レスポンスコード、ユーザーエージェントなどを記録します。
  • CustomLog: アクセスログをproxy_access.logに出力します。
  • ErrorLog: エラーログをproxy_error.logに記録します。

エラーログの重要性と活用方法


エラーログには、リバースプロキシの動作中に発生した問題が記録されます。たとえば、バックエンドサーバーへの接続失敗や403/404エラーなどが確認できます。

tail -f /var/log/apache2/proxy_error.log

リアルタイムでエラーログを確認し、問題発生時に即座に対応できます。

ログレベルの調整


デバッグを行う際は、ログレベルを一時的にdebugに設定し、詳細な情報を取得します。

LogLevel debug

LogLevelの主なレベル

  • emerg: サーバーが動作できない重大なエラー
  • alert: 即座に対応が必要なエラー
  • crit: 重大なエラー
  • error: 一般的なエラー
  • warn: 警告
  • info: 情報レベルのメッセージ
  • debug: 詳細なデバッグ情報

デバッグが完了したら、warnまたはerrorレベルに戻すことを推奨します。

プロキシトラブルシューティング


問題が発生した場合、以下の手順で確認します。

  1. Apacheが正しく動作しているか確認
sudo systemctl status apache2
  1. 設定ファイルの文法チェック
sudo apachectl configtest


Syntax OKと表示されれば設定ファイルに問題はありません。

  1. バックエンドサーバーの動作確認
    バックエンドサーバーが正しく起動しているかを確認します。
curl http://localhost:8080


想定したレスポンスが返らない場合は、バックエンドサーバーの再起動や設定の見直しが必要です。

  1. ファイアウォール設定の確認
    リバースプロキシがバックエンドサーバーに接続できない場合、ファイアウォールでブロックされている可能性があります。
sudo ufw status


必要に応じてポートを解放します。

sudo ufw allow 8080

特定のトラブル事例と対処法

  • 502 Bad Gateway
    バックエンドサーバーがダウンしている、または正しいレスポンスを返していません。サーバーの状態を確認し、再起動します。
sudo systemctl restart backend_service
  • 403 Forbidden
    Apacheのアクセス制限により、プロキシアクセスが拒否されています。Require all grantedを設定し、アクセスを許可します。
<Location />
    Require all granted
</Location>
  • 404 Not Found
    ProxyPassで指定したURLが存在しない場合に発生します。設定ミスがないか確認します。

動作確認とデバッグの反映


設定変更後、Apacheを再起動して反映させます。

sudo systemctl restart apache2


ブラウザからリクエストを行い、アクセスログとエラーログで挙動を確認します。

次のセクションでは、複数ドメインを振り分ける実践的な応用例を解説します。

実践的な応用例:複数ドメインの振り分け設定


リバースプロキシは、複数のドメインやサーバーを1台のApacheサーバーで管理する際に非常に有効です。これにより、異なるドメインへのリクエストを適切なバックエンドサーバーにルーティングできます。本セクションでは、複数のドメインをApacheのリバースプロキシで振り分ける設定方法を解説します。

構成例

  • www.site-a.comhttp://192.168.1.10:8080
  • www.site-b.comhttp://192.168.1.11:8080

仮想ホスト設定


Apacheの仮想ホスト機能を使い、それぞれのドメインに対して異なるバックエンドサーバーを指定します。

# Site A 設定
<VirtualHost *:80>
    ServerName www.site-a.com

    ProxyRequests Off
    ProxyPreserveHost On

    <Location />
        ProxyPass http://192.168.1.10:8080/
        ProxyPassReverse http://192.168.1.10:8080/
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/site-a_error.log
    CustomLog ${APACHE_LOG_DIR}/site-a_access.log combined
</VirtualHost>

# Site B 設定
<VirtualHost *:80>
    ServerName www.site-b.com

    ProxyRequests Off
    ProxyPreserveHost On

    <Location />
        ProxyPass http://192.168.1.11:8080/
        ProxyPassReverse http://192.168.1.11:8080/
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/site-b_error.log
    CustomLog ${APACHE_LOG_DIR}/site-b_access.log combined
</VirtualHost>

設定のポイント解説

  • ServerName: クライアントがアクセスするドメイン名を指定します。
  • ProxyPass / ProxyPassReverse: 各ドメインのリクエストを異なるバックエンドサーバーに転送します。
  • ErrorLog / CustomLog: ドメインごとにログファイルを分け、管理しやすくします。

SSL対応の追加


複数ドメインでSSL通信を行う場合、それぞれの仮想ホストにSSL証明書を設定します。

<VirtualHost *:443>
    ServerName www.site-a.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/site-a.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/site-a.com/privkey.pem

    ProxyRequests Off
    ProxyPreserveHost On

    <Location />
        ProxyPass http://192.168.1.10:8080/
        ProxyPassReverse http://192.168.1.10:8080/
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/site-a_ssl_error.log
    CustomLog ${APACHE_LOG_DIR}/site-a_ssl_access.log combined
</VirtualHost>

ワイルドカード証明書を使用する場合


複数のサブドメインを1つの証明書でカバーするには、ワイルドカード証明書を使用します。

<VirtualHost *:443>
    ServerName *.example.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

    ProxyRequests Off
    ProxyPreserveHost On

    <Location />
        ProxyPass http://192.168.1.10:8080/
        ProxyPassReverse http://192.168.1.10:8080/
    </Location>

    ErrorLog ${APACHE_LOG_DIR}/wildcard_error.log
    CustomLog ${APACHE_LOG_DIR}/wildcard_access.log combined
</VirtualHost>

複数ドメインの動的振り分け


動的に複数のドメインを振り分ける場合は、正規表現を使った設定が可能です。

<VirtualHost *:80>
    ServerAlias *.example.com

    ProxyRequests Off
    ProxyPreserveHost On

    RewriteEngine On
    RewriteRule "^/(.*)" "http://192.168.1.10:8080/$1" [P,L]

    ErrorLog ${APACHE_LOG_DIR}/dynamic_error.log
    CustomLog ${APACHE_LOG_DIR}/dynamic_access.log combined
</VirtualHost>

設定の確認と反映

sudo apachectl configtest
sudo systemctl restart apache2

動作確認


ブラウザからhttp://www.site-a.comおよびhttp://www.site-b.comにアクセスし、それぞれのバックエンドサーバーに正しく転送されることを確認します。

トラブルシューティング

  1. ドメインが解決されない場合
    DNS設定を確認し、各ドメインがApacheサーバーのIPアドレスに正しく向いているか確認します。
nslookup www.site-a.com
  1. 403 Forbiddenエラー
    仮想ホスト設定のRequire all grantedを追加します。
<Location />
    Require all granted
</Location>

まとめ


複数ドメインの振り分け設定により、1台のApacheサーバーで複数のWebアプリケーションを管理できます。これにより、インフラコストの削減と運用の効率化が実現します。次のセクションでは、本記事のまとめを行います。

まとめ


本記事では、Apache mod_proxyを使用してリバースプロキシを構築し、Webサーバーの柔軟性とパフォーマンスを向上させる方法について詳しく解説しました。

リバースプロキシの基本概念から始まり、mod_proxyのインストールと有効化、基本的なリバースプロキシ設定、セキュリティ強化、SSL対応、負荷分散設定、ログの管理、さらには複数ドメインの振り分けまでを網羅しました。

適切にmod_proxyを設定することで、セキュアでスケーラブルなWeb環境を構築でき、サーバーの負荷分散や障害耐性の向上が可能となります。これにより、アクセス増加時や障害発生時でも安定したサービス提供が実現します。

今後の運用においては、定期的なログの確認とSSL証明書の更新を徹底し、セキュリティリスクを最小限に抑えることが重要です。Apache mod_proxyのリバースプロキシ機能を活用し、信頼性の高いWeb環境を構築しましょう。

コメント

コメントする

目次
  1. リバースプロキシの基本概念と仕組み
    1. リバースプロキシの役割
    2. 正引きプロキシとの違い
    3. リバースプロキシの仕組み
  2. mod_proxyのインストールと有効化手順
    1. インストールの確認
    2. インストール手順
    3. Ubuntu / Debian 系
    4. CentOS / RHEL 系
    5. モジュールの有効化
    6. 動作確認
  3. 基本的なリバースプロキシ設定例
    1. シンプルなリバースプロキシの構成
    2. 設定のポイント解説
    3. 設定の反映とApacheの再起動
    4. 動作確認
    5. トラブルシューティング
  4. セキュリティ強化のための設定ポイント
    1. 不正なアクセスを防ぐためのアクセス制御
    2. HTTPヘッダーの隠蔽
    3. バックエンドサーバーのIPアドレスを隠す
    4. リクエストサイズの制限
    5. プロキシへの直接アクセスを防止
    6. クロスサイトスクリプティング(XSS)対策
    7. 設定の反映と確認
  5. SSL対応リバースプロキシ設定
    1. 必要なモジュールの有効化
    2. SSL証明書の取得
    3. SSL対応の仮想ホスト設定
    4. 設定のポイント解説
    5. HTTPからHTTPSへのリダイレクト
    6. 設定の反映とテスト
    7. 証明書の自動更新
  6. 負荷分散のためのプロキシバランサー設定
    1. 必要なモジュールの有効化
    2. 基本的なプロキシバランサーの設定
    3. 設定のポイント解説
    4. 負荷分散方式の選択
    5. ヘルスチェックと障害サーバーの自動除外
    6. 管理インターフェースの追加
    7. 設定の反映とテスト
    8. まとめ
  7. アクセスログとデバッグ方法
    1. アクセスログの設定
    2. エラーログの重要性と活用方法
    3. ログレベルの調整
    4. プロキシトラブルシューティング
    5. 特定のトラブル事例と対処法
    6. 動作確認とデバッグの反映
  8. 実践的な応用例:複数ドメインの振り分け設定
    1. 構成例
    2. 仮想ホスト設定
    3. 設定のポイント解説
    4. SSL対応の追加
    5. ワイルドカード証明書を使用する場合
    6. 複数ドメインの動的振り分け
    7. 設定の確認と反映
    8. 動作確認
    9. トラブルシューティング
    10. まとめ
  9. まとめ