
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/"
で始まるリクエストに対して、環境変数ELBHealthCheck
にyes
を設定します。CustomLog ... env=!ELBHealthCheck
:ELBHealthCheck
がyes
でない(通常のアクセス)リクエストをyour-domain.com-access.log
に出力します。CustomLog ... env=ELBHealthCheck
:ELBHealthCheck
がyes
である(ELBヘルスチェック)リクエストをyour-domain.com-healthcheck.log
に出力します。
これにより、通常のアクセスログとELBのヘルスチェックログを別々のファイルに分けて管理することができます。
- 参照URL: Apache HTTP Server バージョン 2.4 ドキュメント – 環境変数の使用
- 参照URL: Apache HTTP Server バージョン 2.4 ドキュメント – ログファイル
まとめ
この記事では、ApacheのVirtualHostの基本的な設定方法、アクセス制御、そしてELBヘルスチェックのログ出力方法について解説しました。VirtualHostを使いこなすことで、より柔軟で効率的なWebサイト運用が可能になります。ぜひ、あなたの環境に合わせて設定してみてください。
最後に: 最後まで読んでいただきありがとうございました。この記事が、あなたのApache VirtualHost設定の一助となれば幸いです。
コメント