【Linux】 バーチャルホストの設定
バーチャルホストとは
1 台のマシン上で (exmple1.com と exmple2.com のような) 二つ以上のウェブサイトを扱う運用方法のこと。設定はhttpd.conf ファイルで行う。
IP ベース
複数の IP アドレスを公開する Web サーバ毎に使用する。Web サーバ毎に IP アドレス が必要となり、サーバに複数の NIC があり別々の IP アドレスが設定されている場合、複数の IP アドレスを設定しておく必要がある。
NAMEベース
それぞれのホスト名と それに対応する正確な IP アドレスを DNS で設定し、異なる ホスト名を区別する。IPアドレスを直打ちすると、 IPアドレスとマッチする<VirtualHost> の設定がない場合は、IPアドレスのリストの最初にあるバーチャルホスト が使用される。サーバー自体のIPアドレスを直打ちされても、意図したVirtualHost毎にWEBページが表示される。
機器のVer
IP ベースの設定例
<VirtualHost 192.168.10.104:80>
ServerName www.example.com
ServerAdmin admin@example.com # 管理者メールアドレス
DocumentRoot d:/pg/Apache/Apache24/htdocs_com
ErrorLog #エラーログファイル名
TransferLog #アクセスログファイル名
</VirtualHost>
# 192.168.10.104 宛のアクセスがあった場合は、ドキュメントルートに設定されている
# d:/pg/Apache/Apache24/htdocs_com 以下のコンテンツがクライアントへ返される。
<VirtualHost 192.168.10.105:80>
ServerName www.example.jp
ServerAdmin admin@example.jp # 管理者メールアドレス
DocumentRoot d:/pg/Apache/Apache24/htdocs_jp
ErrorLog #エラーログファイル名
TransferLog #アクセスログファイル名
</VirtualHost>
# Listen ディレクティブを使用する IP アドレスの数だけ記述し、
# それぞれのドキュメントルートに設定しているディレクトリに対してアクセスを許可する
Listen 192.168.10.104:80
Listen 192.168.10.105:80
<Directory "${SRVROOT}/htdocs_com">
Require all granted
</Directory>
<Directory "${SRVROOT}/htdocs_jp">
Require all granted
</Directory>
httpd.conf ファイルを保存し Apache を再起動する。
その後、ドメインに対して IP アドレスを割り当てるが、通常は DNS を使ってそれぞれ A レコードなどを登録する。hosts ファイルに記載することもできる。
# ゾーンファイル
www IN A 192.168.10.104
linux IN A 192.168.10.105
# hosts ファイル
192.168.10.104 www.example.com
192.168.10.105 www.example.jp
ドメインにアクセスできるかを確認する。
デフォルトのバーチャルホスト
_default_ を代わりに指定すると、デフォルトで使用されるバーチャルホストを設定することができる。
<VirtualHost 192.168.10.104:80>
ServerName www.example.com
ServerAdmin admin@example.com
DocumentRoot d:/pg/Apache/Apache24/htdocs_com
</VirtualHost>
<VirtualHost _default_:80>
ServerName www.example.jp
ServerAdmin admin@example.jp
DocumentRoot d:/pg/Apache/Apache24/htdocs_jp
</VirtualHost>
IP アドレスを指定するところに _default_ を指定することで、 VirtualHost ディレクティブで IP アドレスが定義されていない IP アドレス宛のリクエストがデフォルトで適用される。
NAME ベースの設定例
NameVirtualHost 192.168.0.1:80
( NameVirtualHost *:80 )
NameVirtualHost 192.168.10.104:80
<VirtualHost 192.168.10.104:80>
ServerName www.example.com
ServerAdmin admin@example.com
DocumentRoot d:/pg/Apache/Apache24/htdocs_com
</VirtualHost>
<VirtualHost 192.168.10.104:80>
ServerName www.example.jp
ServerAdmin admin@example.jp
DocumentRoot d:/pg/Apache/Apache24/htdocs_jp
</VirtualHost>
# ドキュメントルートに設定しているディレクトリに対してアクセスを許可
<Directory "${SRVROOT}/htdocs_com">
Require all granted
</Directory>
<Directory "${SRVROOT}/htdocs_jp">
Require all granted
</Directory>
httpd.conf ファイルを保存し Apache を再起動する。
その後、ドメインに対して IP アドレスを割り当てるが、通常は DNS を使ってそれぞれ A レコードなどを登録する。hosts ファイルに記載することもできる。
# ゾーンファイル
www IN A 192.168.10.104
linux IN A 192.168.10.104
# hosts ファイル
192.168.10.104 www.example.com
192.168.10.104 www.example.jp
ドメインにアクセスできるかを確認する。
※1 つの IP アドレスに対して 3 つの Web サーバを割り当てる場合、2つのドメインに対して設定を行い、 3つ目のドメインを設定せずにアクセスが行われた時、VirtualHost ディレクティブの ServerName に設定されているホストと一致するものがないので、httpd.conf ファイルの中で一番最初に書かれている VirtualHost ディレクティブと一致したとみなされるので注意が必要。
その他設定
<VirtualHost _default_:443>
SSLEngine on #SSLプロトコルを使用するための設定
SSLCertificateFile "/etc/pki/tls/certs/example.com.crt" #証明書の指定
SSLCertificateKeyFile "/etc/pki/tls/private/example.com.key" #秘密鍵の指定
SSLVerifyClient require #そのWebサイトでのみクライアント認証を行う
SSLVerifyDepth 1 #検証する証明書の階層の深さを1に設定
SSLCACertificateFile "/etc/pki/tls/certs/ca-bundle.crt" #信頼するCA(Certificate Authority)証明書が保存されたファイルを指定
</VirtualHost>
# 複数のドメイン名を指定する
<VirtualHost 192.0.2.1>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example
</VirtualHost>
# ディレクトリへのアクセス制限
<VirtualHost 192.0.2.1>
ServerName example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
Require all granted
</Directory>
</VirtualHost>
# リバースプロキシの設定
<VirtualHost 192.0.2.1>
ServerName example.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
# CGIスクリプトの設定
<VirtualHost 192.0.2.1>
ServerName example.com
DocumentRoot /var/www/example
ScriptAlias /cgi-bin/ /var/www/example/cgi-bin/
<Directory /var/www/example/cgi-bin>
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
</VirtualHost>
# パスベースのバーチャルホスト
<VirtualHost 192.0.2.1>
ServerName example.com
DocumentRoot /var/www/example
</VirtualHost>
<VirtualHost 192.0.2.1>
ServerName example.com
DocumentRoot /var/www/example2
Alias /other /var/www/example2
</VirtualHost>
# ユーザーディレクトリの設定
<VirtualHost 192.0.2.1>
ServerName example.com
DocumentRoot /var/www/example
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled
</IfModule>
</VirtualHost>
# SSL証明書の設定
<VirtualHost 192.0.2.1:443>
ServerName example.com
DocumentRoot /var/www/example
SSLEngine on
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem
</VirtualHost>