IPベースのバーチャルホストWWWサーバの構築(SuSE編)
RedHat と同様に SuSE でも Apache でバーチャルホストを動かすことにしました。バーチャルホストには、一つのIPアドレスで運用できる名前ベースのバーチャルホストと、IP アドレスがそれぞれのサイト分必要な IP ベースのバーチャルホストがあります。通常ならコストもかからない名前ベースで充分なのですが、おやじは、SSL 対応が必要なので今回は IP ベースで動かすことにしました。名前ベースのバーチャルホストでは、アクセスしてきたホスト名をベースにApache が制御しますが、SSL セキュアサーバでは SSL での認証が先に走るため使えません。
IP ベースのバーチャルホスト を動かすとなると、既存の IP アドレス以外に最低限もう一つ
IP アドレスが必要になります。単純には、LAN カードを増設して付与すれば済みますが、トラヒックもたいした事はないですし、電気代も無駄なので
Alias で既存のインタフェースにアドレスを追加する方法を採りました。
この方法自体はRedHat でも行っていましたが、SuSE の YaST では設定できません。下記により直接ファイル(ex.
/etc/sysconfig/network/ifcfg-eth0 )を編集することで対応しました。
- 現在の設定の確認
ifconfig で 現在の設定を確認する。NIC が1枚なら、eth0 と lo
が存在するはずである。
# ifconfig eth0 Link encap:Ethernet HWaddr 00:90:27:EB:38:AA
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:27ff:febe:83ad/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1454 Metric:1
RX packets:868 errors:0 dropped:0 overruns:0 frame:0
TX packets:681 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:68022 (66.4 Kb) TX bytes:86967 (84.9 Kb)
Interrupt:11 Base address:0xc000 Memory:ef101000-ef101038
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:60 errors:0 dropped:0 overruns:0 frame:0
TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3912 (3.8 Kb) TX bytes:3912 (3.8 Kb)
|
- バーチャルホスト用の IP の追加
バーチャルホスト用の IP を直接ファイル(ex.
/etc/sysconfig/if0-config)を編集することで追加する。具体的には下記の赤字の2行であり、ネットマスク付きの IP アドレスと LABEL
行を追加する。追加するデータには後ろに「_1」とプレフィックス(任意だが2行とも同一。
)を付けて記述し、「LABEL」行の、「=」の右側に「1」と記述する。この値も任意であるが、これがインタフェース表記上は、 eth0:1
と元のインターフェース:x として表示される。追加できたら、network を再起動し、ifconfig
で設定されたかどうか確認する。「eth0:1」に関する設定が表示されるはずである。外部から、このアドレスに ping
を打ってみる等で動作を確認しておこう。
# vi
/etc/sysconfig/netowork/ifcfg-eth0 BROADCAST='192.168.1.255' IPADDR='192.168.1.100' MTU='1454' NETMASK='255.255.255.0' NETWORK='192.168.1.0'
IPADDR_1='192.168.1.101/24' LABEL_1=1 REMOTE_IPADDR='' STARTMODE='onboot' UNIQUE='GA8e.HVgIlgOrmpC'
[Esc]、[:]、[w]、[q]で保存 #
/etc/init.d/network restart
|
# ifconfig eth0 Link encap:Ethernet HWaddr 00:90:27:EB:38:AA
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:27ff:febe:83ad/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1454 Metric:1
RX packets:868 errors:0 dropped:0 overruns:0 frame:0
TX packets:681 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:68022 (66.4 Kb) TX bytes:86967 (84.9 Kb)
Interrupt:11 Base address:0xc000 Memory:ef101000-ef101038
eth0:1 Link encap:Ethernet HWaddr 00:90:27:EB:38:AA
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1454 Metric:1
Interrupt:11 Base address:0xc000 Memory:ef101000-ef101038
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:60 errors:0 dropped:0 overruns:0 frame:0
TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3912 (3.8 Kb) TX bytes:3912 (3.8 Kb)
|
■Apacheの設定
SuSE の Apache のバーチャルホスト設定は、SSL と同様に /etc/apache2/vhosts.d ディレクトリ配下に置くことになっていますので、これに従いました。このディレクトリ内に vhost.template というファイルがありますので、これをベースに vhost.conf を作成して設定していきます。おやじの場合は SSL 用も必要なので、2つのサイトで計4つの VirtualHost の設定が必要になります。
バーチャルホストの設定にあたっては、Apache の動作が重要になります。バーチャルホストが名前ベースの場合は、DNS
の設定とも関係してかなり動作が複雑になりますが、IP ベースの場合は <VirtualHost>
を IP アドレスで定義すればアクセスが明示されるので設定は簡単です。
但し、おやじのような環境では、サイト毎に IP アドレスが一つしかないため、ドメイン名(http://example0.com)やホスト名((http://www.example0.com)だけでなく、DNS
のホスト名でも同じアドレスで Apache にアクセスされ、ServerName がミスマッチしてもアクセスできてしまいます。REQEST_URI をチェックして
本来アクセスしてほしい URI に rewrite する消極的な方法で対応はできます。もちろんアクセス拒否も可能ですが、そこまですることではないかと思います。
◆ vhost.conf の設定
前述の vhost.template から vhost.conf を作成し、これを編集していきます。名前は何でも構いませんが、「.conf」という拡張子のファイルのみが
Include されるようになっているので、拡張子は「.conf」にしてください。
# cp /etc/apache2/vhosts.d/vhost.template /etc/apache2/vhosts.d/vhost.conf
|
続いて、下記内容を vhost.conf として作成し、他の設定ファイルと同じconfディレクトリ配下に設置します。サンプルを参考に、各サイト固有に定義する必要がある設定を追加します。基本的に、元のサイトで設定していた設定は移す必要があり、ほとんどのディレクティブがバーチャルホストで使用できますので、設置に困ることはないと思います。バーチャルホストで使用できるディレクティブかどうかは、ドキュメントのコンテキストを見ればわかります。
ここでは、www.aconus.com 用のプライベートアドレスを 192.168.1.100 、www.example.com
用を 192.168.1.101として説明します。vhost.template の vhost.conf の内容を対比して示しますが、おやじは2つのバーチャルホストを動かしているので設定が倍になっています。
vhost.template の内容 |
vhost.conf の内容 |
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
ServerName dummy-host.example.com
DocumentRoot /srv/www/vhosts/dummy-host.example.com
ErrorLog /var/log/apache2/dummy-host.example.com-error_log
CustomLog /var/log/apache2/dummy-host.example.com-access_log combined
HostnameLookups Off
UseCanonicalName Off
ServerSignature On
</VirtualHost>
<Directory "/srv/www/vhosts/dummy-host.example.com">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ScriptAlias /cgi-bin/ "/srv/www/vhosts/dummy-host.example.com/cgi-bin/"
<Directory "/srv/www/vhosts/dummy-host.example.com/cgi-bin">
AllowOverride None
Options +ExecCGI -Includes
Order allow,deny
Allow from all
</Directory>
<IfModule mod_userdir.c>
UserDir public_html
Include /etc/apache2/mod_userdir.conf
</IfModule>
|
<VirtualHost 192.168.1.100:80 127.0.0.1:80>
ServerAdmin webmaster@mail.aconus.com
ServerName www.aconus.com
DocumentRoot "/srv/www/htdocs/acorn"
SuexecUserGroup acorn users
ErrorLog /var/log/apache2/error_log
Include /etc/apache2/my_conf/*.conf
Include /etc/apache2/mod_rewrite_ssl.conf
<IfModule mod_userdir.c>
UserDir public_html
Include /etc/apache2/mod_userdir.conf
</IfModule>
</VirtualHost>
<Directory "/srv/www/htdocs/acorn">
Options FollowSymLinks Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<VirtualHost 192.168.1.101:80>
ServerAdmin webmaster@example.com
ServerName www.example.com
DocumentRoot "/srv/www/htdocs/example"
SuexecUserGroup example users
ErrorLog /var/log/apache2/example-error_log
SetEnvIf Remote_Addr 192.168. homelog nolog
SetEnvIf Request_URI "default.ida" wormlog nolog
SetEnvIf Request_URI "root.exe" wormlog nolog
SetEnvIf Request_URI "cmd.exe" wormlog nolog
SetEnvIf Request_URI "Admin.dll" wormlog nolog
CustomLog /var/log/apache2/example-access_log combined env=!nolog
CustomLog /var/log/apache2/example-worm_log common env=wormlog
CustomLog /var/log/apache2/example-home_log common env=homelog
UserDir desabled
Include /etc/apache2/my_conf/mod_rewrite.conf
</VirtualHost>
<Directory "/srv/www/htdocs/example">
Options FollowSymLinks Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory> |
- <VirtualHost>
<VirtualHost>ディレクティブでは、サーバのNICアドレス(192.168.1.100
or 192.168.1.101)とLintenしているポート(通常は80)を「:」で区切って指定する。
- ServerAdmin
サーバ管理者のメールアドレスを指定する。postfix もバーチャルホスト対応しているので、それぞれをサーバ管理者のメールアドレスを設定した。
- ServerName
各サイトのサーバ名(アクセスしてくるホスト名)を指定します。名前ベースのバーチャルホストでは、IP アドレスから Apache は DNS 逆引きを使用して このバーチャルホストの ServerName を探すので重要であるが、IP ベースの場合はさほどの意味を持っていない。内向き DNS がないなら、hosts ファイルで設定しておくとよい。
- DocumentRoot / SuexecUserGroup
各サイトのドキュメントルートを指定する。ここでは、各バーチャルホストのドキュメントルートで
CGI を動かし suEXEC で対応するため、www.aconus.com は「/srv/www/htdocs/acorn」とし、www.example.comは「/srv/www/htdocs/example」として、それぞれ
suEXEC で指定されているドキュメントルート (/srv/www/htdocs) 配下にした。なお、
suEXEC で対応するためには、DocumentRoot とセットで SuexecUserGroup の設定が必要であり、各バーチャルホストの
User/Group を設定した。
vhost.template では SuexecUserGroup を設定していないので suEXEC が機能しないため、DocumentRoot
が「/srv/www/vhosts」となっている他、cgi-bin も同様になっているが、
suEXEC で指定されているドキュメントルート (/srv/www/htdocs) 配下になっていなくても
CGI は動作する。但し、Directory ディレクティブで ExecCGI を指定していないため
CGI は動作しないようになっているので、必要ならこれを Options に追記する。
- Error/CustomLog
www.aconus.com では、ログをカストマイズしたり rewrite を使用したアクセス制御をしているので、その設定を基本設定と同様に
Include した。
- その他
www.aconus.com では、UserDir を使用しているのでその設定を Include し、使用しない
example.com は desable した。ログの分離収集のための設定も転記した。サイト毎に必要な設定を行えばよく、おやじのHPのApache関係の設定や他のサイトの情報、マニュアルを参考にして設定する。
■logrotateの設定
loglotate を SuSE 形式で行っている場合は、ここで追加したログファイルについて設定を忘れずに行ってください。おやじは、RedHat 形式でワイルドカードでの設定なので今回は変更していません。
以上で、二つのサイトにアクセスが可能となるので、Apacheを再起動して両サイトのアクセス確認をしましょう。
Top Pageへ