Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

ApacheのNameVirtualHostのデフォルトサイト設定(含SSL)@CentOS 5

      2011/10/08

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 以外のファイル名にリネームしてあげてください。

 - IT技術 ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
リモートデスクトップでウィンドウ表示と全画面表示を切り替える@Windows 7

最近はクラウドやらなんやらで、Windows 付属のリモートデスクトップ機能を使 …

no image
オフラインファイルで特定のファイルの同期ができない

Windowsにはオフラインファイルという機能があります。この機能を用いることで …

no image
Cのコメント部分を正規表現で検索@vim

ソースコードを機械的に解析する際、コメントが邪魔だったりします。 viでコメント …

no image
Javaアプリの日本語文字化け対策

Linux上のSunのJVMで、GUIアプリを動かすと文字化けしてしまいます。 …

no image
vim-rubyのインストール@cygwin

昨日はDebian上でのvim-rubyインストールについて書いたが、今回はcy …

no image
Windows 7 ファイルサーバにアクセスできない@Windows 7 Ultimate

Windows 7 をファイルサーバにしているのですが、ファイルアクセスが高負荷 …

no image
シェルで逐一時間表示@bash

デバッグを目的に、 逐一コマンド実行時に時間を表示させたい場合があります。 $ …

no image
rubyの文字コードについて考える

rubyでは、1.6以降漢字コードを特別に解釈しなくなったようです。 maznは …

no image
自分のWebページにTwitterの呟きを表示

WordPressのTwitter表示プラグインが重たいので、直接以下のコードを …

no image
USB3.0 メモリ (Super Talent Express DUO ST3U32EDB)

32GBのUSB3.0 のメモリが安かったので買ってみた。そろそろ東芝のUSB3 …