【簡単!】Apache VirtualHost設定で複数サイトを運用!アクセス制御とELBヘルスチェックログ出力も解説

AWSLinux

1台のサーバーで複数のWebサイトを運用したいと思ったことはありませんか?ApacheのVirtualHost(バーチャルホスト、以下VH)機能を使えば、それが簡単に実現できます!この記事では、「VHの設定」の基本から、Webサイトへの「アクセス制御」、そしてELB(Elastic Load Balancer)のヘルスチェックログの出力方法まで、初心者の方にも分かりやすく解説します。さあ、VH設定をマスターして、効率的なサーバー運用を始めましょう!

VirtualHostとは?基本を理解しよう

VirtualHostとは、1つのApacheサーバーで複数の異なるドメイン名(またはホスト名)を持つWebサイトを運用するための仕組みです。これにより、サーバーのリソースを有効活用し、コストを抑えることができます。「VHの設定」は、Apacheの主要な機能の一つです。

簡単!名前ベースのVirtualHost設定

最も一般的な設定方法である名前ベースのVirtualHostの設定手順を簡単に解説します。

1. httpd.conf ファイルの編集

Apacheの設定ファイルである httpd.conf (または apache2.conf など、環境によってファイル名が異なります)を開き、以下の設定がコメントアウトされていないか確認します。もしコメントアウトされていれば、行頭の # を削除して有効にします。

Include /etc/httpd/conf.d/vhosts.conf

この行は、VirtualHostの設定が記述された別のファイルを読み込むためのものです。実際のファイルのパスは、ご利用の環境によって異なる場合がありますのでご注意ください。

2. VirtualHost 設定ファイルの編集

上記で指定されているVirtualHost設定ファイル(例:/etc/httpd/conf.d/vhosts.conf など)を開き、VirtualHostの設定を記述します。基本的な設定例は以下の通りです。

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog /var/log/apache2/example.com-error.log
    CustomLog /var/log/apache2/example.com-access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerName another-example.net
    DocumentRoot /var/www/another-example.net/public_html
    ErrorLog /var/log/apache2/another-example.net-error.log
    CustomLog /var/log/apache2/another-example.net-access.log combined
</VirtualHost>
  • <VirtualHost *:80>: ポート80番(HTTP)でリッスンするVirtualHostの設定を開始します。HTTPSの場合は *:443 を指定します。
  • ServerName example.com: このVirtualHostで運用するドメイン名を指定します。
  • DocumentRoot /var/www/example.com/public_html: このドメインのWebコンテンツが格納されているディレクトリを指定します。
  • ErrorLog /var/log/apache2/example.com-error.log: エラーログの出力先を指定します。
  • CustomLog /var/log/apache2/example.com-access.log combined: アクセスログの出力先とログ形式を指定します。

複数のWebサイトを運用する場合は、それぞれのドメイン名に合わせて <VirtualHost> ブロックを追加します。

VirtualHostとは?基本を理解しよう

VirtualHostとは、1つのApacheサーバーで複数の異なるドメイン名(またはホスト名)を持つWebサイトを運用するための仕組みです。これにより、サーバーのリソースを有効活用し、コストを抑えることができます。「VHの設定」は、Apacheの主要な機能の一つです。

簡単!名前ベースのVirtualHost設定

最も一般的な設定方法である名前ベースのVirtualHostの設定手順を簡単に解説します。

1. httpd.conf ファイルの編集

Apacheの設定ファイルである httpd.conf (または apache2.conf など、環境によってファイル名が異なります)を開き、以下の設定がコメントアウトされていないか確認します。もしコメントアウトされていれば、行頭の # を削除して有効にします。

Apache

Include conf/extra/httpd-vhosts.conf

この行は、VirtualHostの設定が記述された別のファイル (httpd-vhosts.conf) を読み込むためのものです。

2. httpd-vhosts.conf ファイルの編集

次に、conf/extra/httpd-vhosts.conf ファイルを開き、VirtualHostの設定を記述します。基本的な設定例は以下の通りです。

Apache

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/example.com/public_html
    ErrorLog /var/log/apache2/example.com-error.log
    CustomLog /var/log/apache2/example.com-access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerName another-example.net
    DocumentRoot /var/www/another-example.net/public_html
    ErrorLog /var/log/apache2/another-example.net-error.log
    CustomLog /var/log/apache2/another-example.net-access.log combined
</VirtualHost>
  • <VirtualHost *:80>: ポート80番(HTTP)でリッスンするVirtualHostの設定を開始します。HTTPSの場合は *:443 を指定します。
  • ServerName example.com: このVirtualHostで運用するドメイン名を指定します。
  • DocumentRoot /var/www/example.com/public_html: このドメインのWebコンテンツが格納されているディレクトリを指定します。
  • ErrorLog /var/log/apache2/example.com-error.log: エラーログの出力先を指定します。
  • CustomLog /var/log/apache2/example.com-access.log combined: アクセスログの出力先とログ形式を指定します。

複数のWebサイトを運用する場合は、それぞれのドメイン名に合わせて <VirtualHost> ブロックを追加します。

3. Apache の再起動

設定ファイルを編集したら、Apacheを再起動して設定を反映させます。

sudo systemctl restart httpd

これで基本的な名前ベースのVirtualHostの設定は完了です!

VirtualHostでのアクセス制御

VirtualHostの設定内で、特定のディレクトリやファイルへのアクセスを制御することも可能です。「アクセス制御」は、Webサイトのセキュリティを高める上で重要な要素です。

ディレクトリ単位でのアクセス制御例

<VirtualHost *:80>
    ServerName your-domain.com
    DocumentRoot /var/www/your-domain.com/public_html

    <Directory "/var/www/your-domain.com/public_html/admin">
        Require ip 192.168.1.100 192.168.1.101
        # または Basic認証であれば以下
        # Require valid-user
        # AuthType Basic
        # AuthName "Restricted Area"
        # AuthUserFile /path/to/.htpasswd
    </Directory>

    ErrorLog /var/log/apache2/your-domain.com-error.log
    CustomLog /var/log/apache2/your-domain.com-access.log combined
</VirtualHost>
  • <Directory "/var/www/your-domain.com/public_html/admin">: /var/www/your-domain.com/public_html/admin ディレクトリに対する設定を行います。
  • Require ip 192.168.1.100 192.168.1.101: 特定のIPアドレスからのアクセスのみを許可します。
  • Require valid-user: Basic認証などで認証されたユーザーのみアクセスを許可します。

他にも、.htaccess ファイルを利用してディレクトリごとにアクセス制御を設定する方法もあります。

ELBヘルスチェックのログ出力方法

ELBのヘルスチェックは、バックエンドのインスタンスが正常に動作しているかを確認するために定期的に行われます。これらのヘルスチェックのリクエストをApacheのアクセスログに出力させることも可能です。

User-Agent を利用した判別

ELBからのヘルスチェックリクエストには、特定User-Agentが含まれていることが多いです。これを利用してログ形式をカスタマイズし、ヘルスチェックのログを判別したり、別のファイルに出力したりすることができます。

まず、ELBのヘルスチェックのUser-Agentを確認します。AWSのドキュメントなどで確認できます。一般的なUser-Agentの例としては、ELB-HealthChecker/2.0 などがあります。

ログ形式のカスタマイズ例

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{ELBHealthCheck}n" combined

SetEnvIf User-Agent "^ELB-HealthChecker/" ELBHealthCheck=yes
CustomLog /var/log/apache2/your-domain.com-access.log combined env=!ELBHealthCheck
CustomLog /var/log/apache2/your-domain.com-healthcheck.log combined env=ELBHealthCheck
  • LogFormat ... %{ELBHealthCheck}n: 新しいログ形式を定義し、環境変数 ELBHealthCheck の値を記録するようにします。
  • SetEnvIf User-Agent "^ELB-HealthChecker/" ELBHealthCheck=yes: User-Agentが "^ELB-HealthChecker/" で始まるリクエストに対して、環境変数 ELBHealthCheckyes を設定します。
  • CustomLog ... env=!ELBHealthCheck: ELBHealthCheckyes でない(通常のアクセス)リクエストを your-domain.com-access.log に出力します。
  • CustomLog ... env=ELBHealthCheck: ELBHealthCheckyes である(ELBヘルスチェック)リクエストを your-domain.com-healthcheck.log に出力します。

これにより、通常のアクセスログとELBのヘルスチェックログを別々のファイルに分けて管理することができます。

まとめ

この記事では、ApacheのVirtualHostの基本的な設定方法、アクセス制御、そしてELBヘルスチェックのログ出力方法について解説しました。VirtualHostを使いこなすことで、より柔軟で効率的なWebサイト運用が可能になります。ぜひ、あなたの環境に合わせて設定してみてください。

最後に: 最後まで読んでいただきありがとうございました。この記事が、あなたのApache VirtualHost設定の一助となれば幸いです。

コメント

タイトルとURLをコピーしました