CentOS 5 のApacheで、名前ベースのバーチャルホストを構築してみた。
CentOS 5では、基本設定は /etc/httpd/conf/httpd.conf 、追加設定や追加モジュール設定は /etc/httpd/conf.d/ ディレクトリ配下に ~.conf というファイル名で置くような作りになっているので、新しいバーチャルホストもここに置くようにしたい所です。
しかし、バーチャルホストの設定は、一番最初に定義したものが、デフォルトサイトとして使われるようで、IPアドレスでアクセスした場合はこのバーチャルホストのページが表示されてしまいます。
よって、Include文でconf.d 配下のファイルを読み取る前に、デフォルトのバーチャルホストを以下のように定義してあげればOK。
# vi /etc/httpd/conf/httpd.conf ~ 省略 ~ NameVirtualHost *:80 <virtualhost *:80> ServerAdmin root@localhost DocumentRoot /var/www/html ServerName 192.168.0.10 ← サーバのIP または ドメイン名 </virtualhost> # # Load config files from the config directory "/etc/httpd/conf.d". # Include conf.d/*.conf ← この行の前に書く ~ 省略 ~
あとは、conf.d 配下に以下のように、サイト毎のバーチャルホストを定義するだけです。例えば、http://www.hoge.net/ というサイトを作りたいならば、/etc/httpd/conf.d/hoge.conf ファイルを作って、以下のように記述するだけです。
# vi /etc/httpd/conf.d/hoge.conf <VirtualHost *:80> ServerAdmin root@hoge.net DocumentRoot /home/www/hoge ServerName www.hoge.net:80 ErrorLog logs/hoge-error_log CustomLog logs/hoge-access_log combined <Directory "/home/www/hoge"> Options FollowSymLinks Order allow,deny Allow from all AllowOverride All </Directory> </VirtualHost>
ちなみに、Apache 2.2.12 以降では、SNI(Server Name Indication) が実装され、https (SSL) のサイトでもバーチャルホストを定義できます。SSL のバーチャルホストも、通常のバーチャルホストと同様最初に定義されたサイトがデフォルトになるようです。ただし、CentOS 5 のSSLの設定は、すでに conf.d ディレクトリ配下に ssl.conf として外だしされています。そのため、このssl.conf をデフォルトのサイトにしたい場合、このファイルが最初に読み込まれる必要があります。しかし、他のバーチャルホスト(例えばhoge-ssl.conf )を置いた場合、”h” は “s” よりもアルファベット順が先のため、ssl.conf よりも先にhoge-ssl.conf が読み込まれてしまいます。
よって、解決方法として、 ssl.conf を 00-ssl.conf といった名前に変更してあげれば、大抵のファイルよりも先に読み込んでくれます。なお、80ポートの時と同様、SSLののバーチャルホストを使う場合、NameVirtualHostの定義が必要になるので注意してください。
# vi /etc/httpd/conf/httpd.conf
NameVirtualHost *:80
<virtualhost *:80>
ServerAdmin root@localhost
DocumentRoot /var/www/html
ServerName 192.168.0.10
</virtualhost>
NameVirtualHost *:443
#
# Load config files from the config directory "/etc/httpd/conf.d".
#
Include conf.d/*.conf ← この行の前に書く
SSLのバーチャルホスト追加。
# vi /etc/httpd/conf/hoge-ssl.conf <VirtualHost *:443> ServerAdmin root@hoge.net DocumentRoot /home/www/hoge ServerName www.hoge.net:443 SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/hoge-ssl_access_log ssl-combined ErrorLog logs/hoge-ssl_error_log <Directory "/home/www/hoge"> Options FollowSymLinks Order allow,deny Allow from all AllowOverride All </Directory> </VirtualHost>
上記はあくまでオレオレ証明書なので、ちゃんとした証明書が必要な場合は、別途設定が必要です。
なお、SSLのバーチャルホストは、対応したブラウザで見る必要があるらしいですが、最近のブラウザならほとんど対応しているようです。
参考 : http://builder.japan.zdnet.com/etc/20402262/
== 2011/5/7 追記 ==
httpdのRPMをアップデートすると、ssl.confを00-ssl.confにしていた場合、/etc/httpd/conf.d/ssl.conf というファイルが新しく作られてしまい、その影響でhttpdが起動できなくなってしまいますので、こういう時は ssl.conf を削除または .conf 以外のファイル名にリネームしてあげてください。