IPベースのバーチャルホストWWWサーバの構築(SuSE編)


RedHat と同様に SuSE でも Apache でバーチャルホストを動かすことにしました。バーチャルホストには、一つのIPアドレスで運用できる名前ベースのバーチャルホストと、IP アドレスがそれぞれのサイト分必要な IP ベースのバーチャルホストがあります。通常ならコストもかからない名前ベースで充分なのですが、おやじは、SSL 対応が必要なので今回は IP ベースで動かすことにしました。名前ベースのバーチャルホストでは、アクセスしてきたホスト名をベースにApache が制御しますが、SSL セキュアサーバでは SSL での認証が先に走るため使えません。

バーチャルホスト用 IP アドレスの付与方法

IP ベースのバーチャルホスト を動かすとなると、既存の IP アドレス以外に最低限もう一つ IP アドレスが必要になります。単純には、LAN カードを増設して付与すれば済みますが、トラヒックもたいした事はないですし、電気代も無駄なので Alias で既存のインタフェースにアドレスを追加する方法を採りました。
この方法自体はRedHat でも行っていましたが、SuSE の YaST では設定できません。下記により直接ファイル(ex. /etc/sysconfig/network/ifcfg-eth0 )を編集することで対応しました。

  1. 現在の設定の確認

    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)

  2. バーチャルホスト用の 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ディレクトリ配下に設置します。サンプルを参考に、各サイト固有に定義する必要がある設定を追加します。基本的に、元のサイトで設定していた設定は移す必要があり、ほとんどのディレクティブがバーチャルホストで使用できますので、設置に困ることはないと思います。バーチャルホストで使用できるディレクティブかどうかは、ドキュメントのコンテキストを見ればわかります。

なお、SSL も動作させている場合は、こちらと同様の設定をする必要がありますので、RedHat での説明SuSE の SSL 対応の説明を参考に設定してください。

ここでは、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>

■logrotateの設定

loglotate を SuSE 形式で行っている場合は、ここで追加したログファイルについて設定を忘れずに行ってください。おやじは、RedHat 形式でワイルドカードでの設定なので今回は変更していません。
 
以上で、二つのサイトにアクセスが可能となるので、Apacheを再起動して両サイトのアクセス確認をしましょう。


Top Pageへ