>> HOME >> FC5 MENU >> Apache バーチャルホスト設定
現在稼動中のWebサーバー上に、更にもうひとつWebサイトを開設します。
ここでは、Apache の バーチャルホスト機能 を使用して、以下に示す条件で2つのWebサイトを運用できるようにします。
追加するバーチャルホスト名は virtual.jp
追加するWebサイトは http://virtual.jp/
追加するWebサイトのドキュメントルートは /home/virtual/html/
追加するWebサイトのCGIディレクトリは /home/virtual/cgi-bin/
追加するWebサイトへのアクセスログは /var/log/httpd/virtual-access_log に記録します。
追加するWebサイトへのエラーログは /var/log/httpd/virtual-error_log に記録します。

1. バーチャルホスト管理ユーザー作成
1 ) ユーザーの作成
2 ) ホームディレクトリのディレクトリ権限を Apacheが参照できるように変更
2. バーチャルホストのドキュメントルートディレクトリ作成
3. Apache の設定
1 ) Apache 設定ファイル /etc/httpd/conf/httpd.conf の編集
4. Webサーバー間通信暗号化の設定(※ Webサーバー間通信暗号化をを導入している場合のみ)
1 ) SSL 設定ファイル /etc/httpd/conf.d/ssl.conf の編集
5. Apache の再起動
1 ) httpd の再起動
6. DNS サーバー (BIND) の設定
1 ) BIND 設定ファイル /etc/named.conf 編集
2 ) virtual.jp 用正引き(ドメイン名 → IP アドレス)ゾーンデータベースの作成
7. DNS サーバー (BIND) の再起動
1 ) named の再起動
8. 公開前の準備
1. バーチャルホスト管理ユーザー作成
1 ) ユーザーの作成
バーチャルホスト管理ユーザーは、FTP でコンテンツを UPLOAD するものとします。これを外部から行う場合は、安全の為、vsftpd の設定で、ホームディレクトリより上層へのアクセスを禁止しておきます。
vsftpd の設定は『FTPサーバー (vsFTPD)』を参照してください。

例として、virtual というユーザーを作成します。
[root@linux ~]# useradd virtual 
[root@linux ~]# passwd virtual 
Changing password for user virtual.
New UNIX password: xxxxxxxxxx 
Retype new UNIX password: xxxxxxxxxx 
passwd: all authentication tokens updated successfully.
2 ) ホームディレクトリのディレクトリ権限を Apacheが参照できるように変更
[root@linux ~]# chmod 711 /home/virtual 
2. バーチャルホストのドキュメントルートディレクトリ作成
[root@linux ~]# su - virtual 
[virtual@linux ~]$ mkdir /home/virtual/html 
[virtual@linux ~]$ mkdir /home/virtual/cgi-bin 
[virtual@linux ~]$ chmod 755 /home/virtual/html /home/virtual/cgi-bin 
[virtual@linux ~]$ exit 
3. Apache の設定
1 ) Apache 設定ファイル /etc/httpd/conf/httpd.conf の編集
[root@linux ~]# vi /etc/httpd/conf/httpd.conf 

  :
  :
### Section 3: Virtual Hosts
#
# VirtualHost: If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at 
# <URL:http://httpd.apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.

#
# Use name-based virtual hosting.
#
# コメントを解除
NameVirtualHost *:80
#
# NOTE: NameVirtualHost cannot be used without a port specifier 
# (e.g. :80) if mod_ssl is being used, due to the nature of the
# SSL protocol.
#

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

#
# Directives to allow use of AWStats as a CGI
#
#Alias /awstatsclasses "/root/wwwroot/classes/"
#Alias /awstatscss "/root/wwwroot/css/"
#Alias /awstatsicons "/root/wwwroot/icon/"
#ScriptAlias /awstats/ "/root/wwwroot/cgi-bin/"

#
# This is to permit URL access to scripts/files in AWStats directory.
#
#<Directory "/root/wwwroot">
#    Options None
#    AllowOverride None
#    Order allow,deny
#    Allow from all
#</Directory>

# virtual.jp 用の HTMLディレクトリを追加定義します
<Directory "/home/virtual/html">
    Options Includes ExecCGI FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

# virtual.jp 用の CGIディレクトリを追加定義します
<Directory "/home/virtual/cgi-bin">
    Options None
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

# 以下、メインホスト情報(mountainbigroad.jp)
<VirtualHost *:80>
    ServerName mountainbigroad.jp
</VirtualHost>

# 以下、追加ホスト情報(virtual.jp)
<VirtualHost *:80>
    ServerAdmin webmaster@virtual.jp
    ServerName virtual.jp
    DocumentRoot /home/virtual/html/
    ErrorLog logs/virtual-error_log
    CustomLog logs/virtual-access_log combined env=!no_log
    ScriptAlias /cgi-bin/ "/home/virtual/cgi-bin/"
</VirtualHost>
4. Webサーバー間通信暗号化の設定(※ Webサーバー間通信暗号化をを導入している場合のみ
1 ) SSL 設定ファイル /etc/httpd/conf.d/ssl.conf の編集
ここに記述するネームベースのバーチャルホスト(グローバルIPひとつで複数のWebサイトを運営する場合)では、SSL はひとつのバーチャルホストしか扱えませんので、 https://mountainbigroad.jp/ でアクセスしても https://virtual.jp/ でアクセスしても、https://mountainbigroad.jp/ のページが表示されます。
そこで、https://virtual.jp/ でアクセスされた場合には http://virtual.jp/ へリダイレクトさせます。
※ mod_rewrite の詳細については『Apache HTTP でアクセスした時、自動的に HTTPS に rewrite する方法』を参照してください。
[root@linux ~]# vi /etc/httpd/conf.d/ssl.conf 

  :
  :
#   Per-Server Logging:
#   The home of a custom SSL log file. Use this when you want a
#   compact non-error SSL logfile on a virtual host basis.
CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

    # 以下を追加
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteLog "logs/rewrite_log"
        RewriteLogLevel 0
        RewriteCond %{HTTP_HOST} !mountainbigroad.jp$
        RewriteRule ^/(.*)?$ http://%{HTTP_HOST}/$1 [L,R]
    </IfModule>

</VirtualHost>
5. Apache の再起動
1 ) httpd の再起動
[root@linux ~]# service httpd restart 
httpdを停止中:                                             [  OK  ]
httpd を起動中:                                            [  OK  ]
6. DNS サーバー (BIND) の設定
1 ) BIND 設定ファイル /etc/named.conf 編集
[root@linux ~]# vi /etc/named.conf 

  :
  :
// 以下を追加 (virtual.jp 用正引きゾーン)
zone "virtual.jp" IN {
      type master;
      file "virtual.jp.db";
      allow-update { none; };
};
2 ) virtual.jp 用正引き(ドメイン名 → IP アドレス)ゾーンデータベースの作成
[root@linux ~]# vi /var/named/virtual.jp.db 

$TTL    86400
@   IN  SOA virtual.jp. root.virtual.jp.(
                        2006071100 ; Serial
                        28800      ; Refresh
                        14400      ; Retry
                        3600000    ; Expire
                        86400 )    ; Minimum
    IN  NS      virtual.jp.
    IN  MX  10  virtual.jp.
    IN  A       192.168.1.11
www IN  CNAME   virtual.jp.
7. Apache の再起動
1 ) named の再起動
[root@linux ~]# service named restart 
namedを停止中:                                             [  OK  ]
namedを起動中:                                             [  OK  ]
8. 公開前の準備
外部よりDNS名でアクセスするには、ドメイン名の取得を行っている必要があります。