apacheでバーチャルホスト

バーチャルホストの種類

1.名前ベース(1つのIPアドレスで複数ウェブサイト)
メリット :IPアドレスが1つで済む
デメリット:セキュア(ssl)サイトを複数構築するには、各サイトでポート(443)を変えなければならない
なお、SSLサーバ証明書はドメイン毎に必要です。

Nameベース バーチャルホスト図

Nameベース バーチャルホスト図

2.IPアドレスベース(1台のサーバで各ドメインにIPアドレスを設定)
メリット :同じポート(443)でセキュア(ssl)サイトを複数構築できる(URLに”:444″とか付くと非常に恰好悪い)
デメリット:ウェブサイトの数だけIPアドレスが必要(グローバル・ローカル共に)

IPアドレスベース バーチャルホスト図

IPアドレスベース バーチャルホスト図


上記Visioファイルはhttps://www.isoppe.jp/upload/log/006.zip

■IPアドレスベース バーチャルホストの設定手順
1.サブインターフェースの作成
2.各バーチャルホストの管理用ユーザの追加
3.必要なフォルダの作成(/home/にある各ユーザのディレクトリにwww,ssl,log等を作成)
4.SSL用サーバ証明書の作成(セキュアwebを利用する場合のみ)
5.httpd.confの設定
6.ssl.confの設定(セキュアwebを利用する場合のみ)

1.サブインターフェースの作成
サブインターフェースとして、eth0:1eth0:2を作成します。

eth0:1を作成

# vi /etc/sysconfig/network-scripts/ifcfg-eth0\:1
DEVICE=eth0:1
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.12
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes

eth0:2を作成

# vi /etc/sysconfig/network-scripts/ifcfg-eth0\:2
DEVICE=eth0:2
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.13ss
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes

サブインターフェースの設定が終わったらnetworkサービスを再起動し、ifconfigコマンドで確認

# /etc/rc.d/init.d/network restart
# ifconfig eth0:1
eth0:1 Link encap:Ethernet HWaddr 00:0C:29:00:99:00
inet addr:192.168.1.11 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

2.各バーチャルホストの管理用ユーザの追加
通常、ドメイン毎に管理者は異なりますのでそれぞれのアカウントを作成します。

# useradd hoge.example1.com
# useradd hoge.example2.com
# useradd hoge.example3.com

3.必要なフォルダの作成
各ウェブサイトの動作に必要なフォルダを作成します。
www・・・各ウェブサイトのhttpドキュメントルート
ssl・・・各セキュアサイトのhttpsドキュメントルート
log・・・apacheの動作ログを保存するフォルダ

4.SSL用サーバ証明書の作成
作成方法は下記のサイトが参考になります。
CentOSで自宅サーバー構築:Webサーバー間通信内容暗号化(Apache+mod_SSL)
http://centossrv.com/apache-ssl.shtml

・Webサーバー名は、各ウェブサイトのドメイン名で設定します。
・作成されるserver.crt、server.keyは各ドメイン名で管理した方が楽です。

5.httpd.confの設定
“hoge.example1.com”はメインホストとして作成し、他2ウェブサイトの為に下記設定を追加します。
なお、扱うドメインが多くなると煩雑になるので、/etc/httpd/conf.d/内にドメイン毎に設定ファイルを作成した方が良いかもしれません。
当方は”コピペがし易い”の身勝手な理由で1つのファイルにまとめてます。

# vi /etc/httpd/conf/httpd.conf
<VirtualHost 192.168.1.11:80>
DocumentRoot /home/hoge2/www
ServerName hoge.example2.com
</VirtualHost>

<VirtualHost 192.168.1.12:80>
DocumentRoot /home/hoge3/www
ServerName hoge.example3.com
</VirtualHost>

IPアドレスの後に“:80”を入れなくてもアクセスできますが
同ドメインでセキュアサイト(443)も構築する場合、未記入だとhttpアクセスできなくなります。

6.ssl.confの設定
“hoge.example1.com”はメインホストとして作成し、他2ウェブサイトの為に下記設定を追加します。
なお、扱うドメインが多くなると煩雑になるので、ドメイン毎に設定ファイルを作成した方が良いかもしれません。
当方は”コピペがし易い”の身勝手な理由で1つのファイルにまとめてます。

# vi /etc/httpd/conf.d/ssl.conf
<VirtualHost 192.168.1.11:443>
DocumentRoot “/home/hoge2/ssl”
ServerName hoge.example2.com:443
ServerAdmin root@example2.com
ErrorLog /home/hoge2/log/error.log
TransferLog /home/hoge2/log/access_log
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/hoge.example2.com.crt
SSLCertificateKeyFile /etc/pki/tls/certs/hoge.example2.com.key

<Files ~ “¥.(cgi|shtml|phtml|php3?)$”>
SSLOptions +StdEnvVars
</Files>
<Directory “/var/www/cgi-bin”>
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent “.*MSIE.*” ¥
nokeepalive ssl-unclean-shutdown ¥
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log ¥
“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x ¥”%r¥” %b”
</VirtualHost>

<VirtualHost 192.168.1.12:443>
DocumentRoot “/home/hoge3/ssl”
ServerName hoge.example3.com:443
ServerAdmin root@example3.com
ErrorLog /home/hoge3/log/error.log
TransferLog /home/hoge3/log/access_log
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/hoge.example3.com.crt
SSLCertificateKeyFile /etc/pki/tls/certs/hoge.example3.com.key

<Files ~ “¥.(cgi|shtml|phtml|php3?)$”>
SSLOptions +StdEnvVars
</Files>
<Directory “/var/www/cgi-bin”>
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent “.*MSIE.*” ¥
nokeepalive ssl-unclean-shutdown ¥
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log ¥
“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x ¥”%r¥” %b”
</VirtualHost>

最後に、httpdサービスを再起動して変更を反映させます。

# /etc/rc.d/init.d/httpd restart

===================================
メモ
バーチャルホスト:1台のWebサーバで複数のドメイン名のWebサイトを運用すること。Webサーバソフトの機能の一つ。
バーチャルドメイン:1台のサーバ(もしくは1つのIPアドレス)に複数のドメインを割り当て、同時に異なるサービスを提供すること。
            なので、1台のメールサーバに複数のドメインを割り当てることもバーチャルドメインとなる。

検証環境:CentOS5.5
      Apache2.2.3