Apache の virtualhost 機能を使った複数ドメインの運用

もりもり自鯖ワールドで使っているサーバーでは、現在のところ3つのホームページがあります。
ドメイン名(サブドメインも含めた)でのアクセスで、同じサーバーであるのにあたかも
複数のサーバーが動いているように見えます。このページではその仕組みを解説していきます。


第1サーバーのドメイン名:
http://www.mok2.net/
http://mori2.zive.net/(サブドメインでの運用)

スタートページ:
http://www.mok2.net/HServer/
http://mori2.zive.net/HServer/

ホームページのタイトル:
もりもり自鯖ワール


第2サーバーのドメイン名(サブドメインで運用):
http://mori2.no-ip.com/
http://mori2.hn.org/

スタートページ:
http://mori2.no-ip.com/www/
http://mori2.hn.org/www/

ホームページのタイトル:
もりもりマンション悩み相談室


第3サーバーのドメイン名(サブドメインで運用):
http://hanshin.no-ip.com/
http://hanshin.ddp.jp/

スタートページ:
http://hanshin.no-ip.com/www/
http://hanshin.ddo.jp/www/

ホームページのタイトル:
阪神マンション管理組合協議会


スタートページとホームページを分けているのは、外部からの攻撃に対してのセキュリティを
上げるための話で、ルートでの設定は数秒でジャンプするように設定しています。
それでは、一々3つものホームページなど必要無いのでは?と言われそうですが、
実は、将来はこの第1ページ以外は別の人に何時でも管理を譲れるように考えて作りました。

データ部分の中身を紹介しましょう。少しいじってます。
[root@mori2 morita]# ls -l /home
合計 108
drwxr-xr-x   12  morita  morita  4096  Apr 19 21:25   HServer
drwxr-xr-x    4  morita  morita  4096  Mar 30 22:04   Union
drwxr-xr-x   13  morita  morita  4096  Apr 13 19:46   cgi
drwxr-xr-x    3  morita  morita  4096  Apr 13 12:30   cgi-lib
drwx------   5  hanshin hanshin 4096  Apr 15 17:08    hanshin
drwxr-xr-x    3  hanshin hanshin 4096  Apr 15 20:09   hanshin.no-ip.com
drwxr-xr-x    3  root   root    4096  Apr 15 17:01   hanshinroot

drwxr-xr-x    6  root   root    4096  Feb 13 11:17   httpd
drwxr-xr-x    6  morita  morita  4096   Mar 25 23:39   inside
drwx------   2  root   root   16384   Feb 13 11:01   lost+found
drwx------   5  mori2  mori2   4096   Apr 15 21:33   mori2
drwxr-xr-x    3  mori2  mori2   4096   Apr 15 21:33   mori2.no-ip.com
drwxr-xr-x    3  root   root    4096   Apr 15 21:05   mori2root

drwxr-xr-x   17  morita  morita   4096   Apr 19 22:42   morita
drwxr-xr-x    6  morita  morita   4096   Mar 30 21:41   outside
drwx------   5  webmaste admin  4096   Mar 3 16:08   webmaster


この中の青と緑の色字の部分がそれぞれ、第3サーバー、第2サーバーで使う部分です。実際に
各ユーザである mori2さんと hanshinさんのホームディレクトリーには、外部から ftpやsshを
使って作業しやすいように、例えば、こんな感じでリンク(windowsではエイリアス)をはってます。

こんな感じです。
[root@mori2 /root]# ls -l /home/hanshin
合計 4
lrwxrwxrwx  1 hanshin  hanshin 23 Apr 15 17:07  www -> /home/hanshin.no-ip.com
[root@mori2 /root]# ls -l /home/mori2
合計 12
lrwxrwxrwx  1 mori2  mori2  21 Apr 15 21:32   www -> /home/mori2.no-ip.com[root@mori2

序でに、moritaさんのホームディレクトリを公開するとこんな感じになってます。
[root@mori2 /root]# ls -l /home/morita
合計 92
lrwxrwxrwx  1 morita morita  11   Apr 12 09:37   Union -> /home/Union
-rwxr-xr-x  1 morita morita  1102 Feb 14 00:23   Xrootenv.0
lrwxrwxrwx  1 morita morita  9    Apr 12 09:37   cgi -> /home/cgi
lrwxrwxrwx  1 morita morita  13   Apr 13 12:28   cgi-lib -> /home/cgi-libl
lrwxrwxrwx  1 morita morita  12   Apr 12 09:37   inside -> /home/inside
lrwxrwxrwx  1 morita morita  13   Apr 12 09:37   outside -> /home/outside
lrwxrwxrwx  1 morita morita  13   Apr 12 09:37   www -> /home/HServer

これは、自分のホームディレクトリには、絶対にhttpdサービスから見れないようにして
おかないとロボットによって全部盗聴されてしまうのを防ぐだけの話です。

良く使う public_html ディレクトリや htm、wwwディレクトリなどに公開するファイルを入れる
のとほぼ同じ効果があります。実は、html ディレクトリでも公開できるようになっておりますが、
ユーザー名しか設定できませんので、あえてこのような link 設定による方法を採っております。


次に vine linux (ver2.6)のapacheの設定ファイルを見ていきましょう。設定ファイルは /etc/httpd/conf/httpd.conf そのものです。
vi editor を使って要点部分だけの変更でも良いですが、変更カ所が少なくないので、
root 権限で /home/morita にコピーしたものを ftp 経由で windows 上で編集し直せば
楽になります。

それでは、大まかな変更部分だけを抜き書きします。
##
## httpd.conf -- Apache HTTP server configuration file
##
#


#Section 1では編集部分なし、

#Section 2の


ServerAdmin webmaster@mok2.net


ServerName www.mok2.net

#SSIも使えるように、

#
<Directory /home/httpd/html>

Options FollowSymLinks MultiViews IncludesNoExec

AllowOverride None

Order allow,deny
Allow from all
</Directory>

# ワイルドカードでの使用も使えるように、当然SSI、CGIはokだよ

UserDir html
#

<Directory "/home/*/html">
Options ExecCGI IncludesNoExec
AllowOverride None
order deny,allow
allow from all
</Directory>



# indexファイルの呼び順も書いておかないと

DirectoryIndex index.html index.htm index.cgi index.shtml


# エラーメッセージも独自なものに書いて、少し驚かす

# request will *not* be available to such a script.
ErrorDocument 401 /error/401.shtml
ErrorDocument 403 /error/403.shtml
ErrorDocument 404 /error/404.shtml
ErrorDocument 500 /error/500.shtm
l


# Section3 でやっと virtualhost の設定部分が出てくる。
#########Morita VirtualHost <=======-------------------Start
#Alias for /home/*********/
#Alias /HServer/ "/home/HServer/"
#Alias /Union/ "/home/Union/"
#Alias /cgi/ "/home/cgi/"
##############################################Main domain
########ServerName www.mok2.net ### Outside name
NameVirtualhost 192.168.100.15

# ドメイン名からのvirtualhostのアクセスが失敗した場合はデフォルトにドメイン設定となる
#default ServerName www.mok2.net
ServerName www.mok2.net

HostNameLookups double
UseCanonicalName off

# No.1 virtual domain host ==> www.mok2.net
<VirtualHost 192.168.100.15>

# エイリアス機能を使って、ドメイン名以下のpathを切る作業です。
Alias /HServer/ "/home/HServer/"
Alias /Union/ "/home/Union/"
Alias /cgi/ "/home/cgi/"

# ドキュメントルートとサーバーネームの設定がこのvirtualhostのミソだよ

ServerAdmin webmaster@mok2.net
DocumentRoot /home/outside/html
ServerName www.mok2.net

### Main domain name ( default Outside name)

# 下の設定は意味が解らなかったが、おまじない設定した。

HostNameLookups double
UseCanonicalName off


##############ScriptAlias /cgi/ /home/cgi/
<Directory /home/cgi>
AllowOverride None
Options ExecCGI IncludesNoExec
AddType application/x-httpd-cgi .cgi .pl
Order allow,deny
Allow from all
</Directory>


# スクリプトエイリアス機能の場合は、cgi, ssiファイル以外は無視されるので注意

ScriptAlias /Union-cgi/ /home/Union/cgi-bin/

<Directory "/home/Union/cgi-bin">
Options ExecCGI IncludesNoExec
AddType application/x-httpd-cgi .cgi .pl
AllowOverride None
Order allow,deny
Allow from all
</Directory>

</VirtualHost>


## 一応、これでメインの独自ドメインのvirtulahostの設定はお終い


##########
##########################
###mori2.zive.net

# 第1サーバー予備用のサブドメイン設定での運用

# No.2 virtual domain host ==> mori2.zive.net
<VirtualHost 192.168.100.15>

Alias /HServer/ "/home/HServer/"
Alias /Union/ "/home/Union/"
Alias /cgi/ "/home/cgi/"

ServerAdmin webmaster@mok2.net
DocumentRoot /home/httpd/html
ServerName mori2.zive.net

### No.2 domain name (Outside name <==www.mok2.net )

HostNameLookups double
UseCanonicalName off

##############ScriptAlias /cgi/ /home/cgi/
<Directory /home/cgi>
AllowOverride None
Options ExecCGI IncludesNoExec
AddType application/x-httpd-cgi .cgi .pl
Order allow,deny
Allow from all
</Directory>

ScriptAlias /Union-cgi/ /home/Union/cgi-bin/

<Directory "/home/Union/cgi-bin">
Options ExecCGI IncludesNoExec
AddType application/x-httpd-cgi .cgi .pl
AllowOverride None
Order allow,deny
Allow from all
</Directory>

</VirtualHost>


# 第2サーバーの設定メインはmori2.no-ip.com の方だ

# No.3 virtual domain host ==> mori2.no-ip.com
<VirtualHost 192.168.100.15>

Alias /cgi/ "/home/cgi/"
Alias /www/ "/home/mori2.no-ip.com/"

ServerAdmin webmaster@mok2.net
DocumentRoot /home/mori2root/html
ServerName mori2.no-ip.com

### No.3 domain name (Outside name nayami soudannsitu)

HostNameLookups double
UseCanonicalName off

##############ScriptAlias /cgi/ /home/cgi/
<Directory /home/cgi>
AllowOverride None
Options ExecCGI IncludesNoExec
AddType application/x-httpd-cgi .cgi .pl
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

# 第2サーバーの予備用(mori2.hn.org)の設定

# No.4 virtual domain host ==> mori2.hn.org
<VirtualHost 192.168.100.15>

Alias /cgi/ "/home/cgi/"
Alias /www/ "/home/mori2.no-ip.com/"

ServerAdmin webmaster@mok2.net
DocumentRoot /home/mori2root/html
ServerName mori2.hn.org

### No.4 domain name (Outside name nayami soudannsitu <== mori2.no-ip.com)

HostNameLookups double
UseCanonicalName off

##############ScriptAlias /cgi/ /home/cgi/
<Directory /home/cgi>
AllowOverride None
Options ExecCGI IncludesNoExec
AddType application/x-httpd-cgi .cgi .pl
Order allow,deny
Allow from all
</Directory>

ScriptAlias /Union-cgi/ /home/Union/cgi-bin/

</VirtualHost>

# 第3サーバーの設定、メインは hanshin.no-ip.com だ

###################### hanshin kanrikumiai kyougikai HP
# No.5 virtual domain host ==> hanshin.no-ip.com
<VirtualHost 192.168.100.15>

Alias /cgi/ "/home/cgi/"
Alias /www/ "/home/hanshin.no-ip.com/"

ServerAdmin webmaster@mok2.net
DocumentRoot /home/hanshinroot/html
ServerName hanshin.no-ip.com

### No.5 domain name (Outside name)

HostNameLookups double
UseCanonicalName off

##############ScriptAlias /cgi/ /home/cgi/
<Directory /home/cgi>
AllowOverride None
Options ExecCGI IncludesNoExec
AddType application/x-httpd-cgi .cgi .pl
Order allow,deny
Allow from all
</Directory>

</VirtualHost>



# 第3サーバーの予備用(hanshinddo.jp)の設定


##################### hanshin kanrikumiai kyougikai HP
# No.6 virtual domain host ==> hanshin.ddo.jp
<VirtualHost 192.168.100.15>

Alias /cgi/ "/home/cgi/"
Alias /www/ "/home/hanshin.no-ip.com/"

ServerAdmin webmaster@mok2.net
DocumentRoot /home/hanshinroot/html
ServerName hanshin.ddo.jp


### No.6 domain name (Outside name)

HostNameLookups double
UseCanonicalName off

##############ScriptAlias /cgi/ /home/cgi/
<Directory /home/cgi>
AllowOverride None
Options ExecCGI IncludesNoExec
AddType application/x-httpd-cgi .cgi .pl
Order allow,deny
Allow from all
</Directory>

</VirtualHost>


# 内部サーバーの設定

#############################################
### Inside Sub domain
# No.7 virtual domain host
NameVirtualHost 192.168.100.15:80

<VirtualHost 192.168.100.15>

Alias /cgi/ "/home/cgi/"
Alias /HServer/ "/home/HServer/"
Alias /Union/ "/home/Union/"
Alias /hanshinwww/ "/home/hanshin.no-ip.com/"
Alias /mori2www/ "/home/mori2.no-ip.com/"

ServerAdmin mori2@www2.kiy.jp
DocumentRoot /home/inside/html
ServerName mori2

### Sub domain name(Inside name)
HostNameLookups double
UseCanonicalName off

ScriptAlias /inside-cgi/ /home/inside/html/cgi-bin/

<Directory /home/inside/html/cgi-bin>
AllowOverride None
Options ExecCGI IncludesNoExec
Order allow,deny
Allow from all
</Directory>

############ScriptAlias /cgi/ /home/cgi/

<Directory /home/cgi>
AllowOverride None
Options ExecCGI IncludesNoExec
AddType application/x-httpd-cgi .cgi .pl
Order allow,deny
Allow from all
</Directory>

ScriptAlias /Union-cgi/ /home/Union/cgi-bin/

<Directory "/home/Union/cgi-bin">
Options ExecCGI IncludesNoExec
AddType application/x-httpd-cgi .cgi .pl
AllowOverride None
Order allow,deny
Allow from all
</Directory>

ScriptAlias /HServer-cgi/ /home/HServer/cgi-bin/

<Directory "/home/HServer/cgi-bin">
Options FollowSymLinks MultiViews IncludesNoExec ExecCGI
AddType application/x-httpd-cgi .cgi .pl
AllowOverride None
Order allow,deny
Allow from all
</Directory>


</VirtualHost>


<VirtualHost _default_:*>
</VirtualHost>


おまけ

入力制限を、この設定ファイルでやっちまえば、まずもってアクセスできる、できないが
自由に決めれる。

最終行近くに下のような形で書いてくだけの話です。

#Access Control for /home/morita/Union
<Directory "/home/Union">
#my home
Allow from 192.168.100.0/255.255.255.0
#kobe-kosen
Allow from 210.199.211.46
#wakayama-nct
Allow from 210.237.86.3
#yonago-k
Allow from 210.166.55.82
#yuge
Allow from 160.245.112.5