DMZ設置に挫折するも、バーチャルホストはなんとか成功

  • 投稿日:
  • by
  • カテゴリ:

昨夜の20時から23時頃まで、当サイトへのアクセスができなかったのは、WebサーバーをDMZへ設置するトライをしていたからでした。

WebサーバーをDMZに置くこと自体はできたのですが、LAN側からもWAN側からもそのWebサーバーにアクセスすることができません。
PE-200NEの設定は本当に難解です。 製造元のNECの方も見てみましたが、サッパリ分かりません。 結局は挫折して元に戻しました。
WebサーバーをDMZに置いた時の、静的IPマスカレードやパケットフィルタの設定例を、マニュアルに載せておいてほしいと思います。


次に今度はApacheのバーチャルホストの設定をやってみました。
まず、/usr/local/etc/apache22/httpd.conf 内の記述を

# Virtual hosts
Include etc/apache22/extra/httpd-vhosts.conf

というように有効にします。

それでは「black-pepper.giorcub.com」からやってみます。 /blackpepper というディレクトリに置いてありますので、httpd-vhosts.conf を以下のように設定しました。

<VirtualHost *:80>
    ServerAdmin (管理者のメールアドレス)
    DocumentRoot "/usr/local/www/apache22/data"
    ServerName www.still-laughin.com
#   ServerAlias www.dummy-host.example.com
    ErrorLog "/var/log/www-error.log"
    CustomLog "/var/log/www-access.log" common
</VirtualHost>
 
<VirtualHost *:80>
    ServerAdmin (管理者のメールアドレス)
    DocumentRoot "/usr/local/www/apache22/data/blackpepper"
    ServerName black-pepper.giorcub.com
    ErrorLog "/var/log/blackpepper-error.log"
    CustomLog "/var/log/blackpepper-access.log" common
    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteRule ^/blackpepper/(.*)$ /$1 [R=301,L]
    </IfModule>
</VirtualHost>

Apacheに設定を反映させてアクセスしてみると、ちゃんと「http://black-pepper.giorcub.com/blackpepper」が、「http://black-pepper.giorcub.com/」にリダイレクトされました。


これに気を良くして、今度は「shiba-log.com」にチャレンジしてみます。 「black-pepper.giorcub.com」は静的なWebページでしたが、こちらはMT5.01によるblogですのでちょっと厄介です。

まず、サブドメイン(ホスト名)が「www」から「kichiro」に変わりますので、レジストラのDNSに「kichiro」を追加します(宛先はwwwと同じ)。
それから httpd-vhosts.conf を、

<VirtualHost *:80>
    ServerAdmin (管理者のメールアドレス)
    DocumentRoot "/usr/local/www/apache22/data"
    ServerName www.still-laughin.com
#   ServerAlias www.dummy-host.example.com
    ErrorLog "/var/log/www-error.log"
    CustomLog "/var/log/www-access.log" common
    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteRule ^/mt/shiba-log/(.*)$ http://kichiro.shiba-log.com/$1
      RewriteRule ^/mt/monolog/(.*)$ http://blog.still-laughin.com/$1
      RewriteCond %{HTTP_HOST} ^www.shiba-log.com$
      RewriteRule ^/(.*) http://www.still-laughin.com/$1
    </IfModule>
</VirtualHost>
 
<VirtualHost *:80>
    ServerAdmin (管理者のメールアドレス)
    DocumentRoot "/usr/local/www/apache22/data/mt/shiba-log"
    ServerName kichiro.shiba-log.com
    ErrorLog "/var/log/kichiro-error.log"
    CustomLog "/var/log/kichiro-access.log" common
    <IfModule mod_rewrite.c>
      RewriteEngine on
      RewriteRule ^/mt/shiba-log/(.*)$ /$1 [R=301,L]
    </IfModule>
</VirtualHost>

と設定しました。
最初に「http://www.shiba-log.com/mt/shiba-log/」にアクセスしてきたところで、「http://kichiro.shiba-log.com/」に飛ばします。
それから「http://kichiro.shiba-log.com/」の中でも、「/mt/shiba-log/」を「/」に置換しています。

ところがここで、<$mt:Include> をSSIで挿入している部分が読み込まれないという問題が起こりました。 SSIで読み込まれるファイルパスは、mod_rewriteによる置換の対象外のようです。
これはMT5の「全般設定」の公開パスを、下記のように設定することで解決しました。 念の為、再構築しました。

mt5_sub_domain.jpg

これでSSIで挿入したファイルも読み込まれるようになりましたが、今度はスタイルシートが適用されません。 スタイルシート(styles.css)の中身は、

/* This is the StyleCatcher theme addition. Do not remove this block. */
@import url(/mt/mt-static/themes-base/blog.css);
@import url(/mt/mt-static/support/themes/hills-green/hills-green.css);
/* end StyleCatcher imports */

となっています。 ここで「/mt/mt-static/」は、絶対パスでは「/usr/local/www/apache22/data/mt/mt-static/」になります。
しかし、「kichiro.shiba-log.com」のドキュメントルートは「/usr/local/www/apache22/data/mt/shiba-log」ですから、「/mt/mt-static/」にアクセスすると「/usr/local/www/apache22/data/mt/shiba-log/mt/mt-static」にアクセスすることになる訳です。

解決策ですが、シンボリックリンクを張ることにしました。

www# cd /usr/local/www/apache22/data/mt/shiba-log
www# mkdir mt
www# ln -s /usr/local/www/apache22/data/mt/mt-static mt/mt-static

これでどうにか問題なさそうです。

<追記>
シンボリックリンクなんか張るよりも、せっかくmod_rewriteが動いているんだから、httpd-vhost.confのそれぞれのドメインに

RewriteRule ^/mt/mt-static/(.*)$ http://www.still-laughin.com/mt/mt-static/$1

と書いてやるのが良いようです。

あとは favicon.ico のパスが「/favicon.ico」でいいかと思ったらダメで、「/mt/shiba-log/favicon.ico」にしたらOKだったりとか、ドキュメントルートが変わるので Robot.txt は仮想サーバーごとに置かなければならなかったりとか。
これで当blogもサブドメインに移行できそうです。