2010/10/10

Ubuntu 10.04 LTSでレンタルサーバの確認用にVirtualHostを設定してみる

外部のレンタルサーバ上のWebサーバにあるコンテンツ確認を手元のUbuntu 10.04 LTSで行なっていますが、できるだけ外部サイトと同じ環境を準備する必要があるなぁと思っています。

特に手元で http://localhost/ host1 /index.html といったURLでみたファイルを、外部サイトにコピーして http://host1.example.org/index.html のようなURLで正確に見れるかを確認する時には、だいたいは相対パスで対応できるのですが、十分ではない時がまれにあります。

サイト内の参照を相対パスで記述することはできますが、絶対パスで参照したいものもあります

favicon.icoは/直下に必要ですし、各ページで共通のテンプレートを使いたい場合に相対パスは手間で、サイト全体のロゴは/images/logo.pngのようなパスで全ページに埋め込むのがページの階層によって相対パスを作成するより自然に思えます。

ホスト名を追加する

とりあえず手元で確認するために、/etc/hostsを編集して手元で適当なホスト名をでっち上げることにします。

この時には存在しないホスト名(今回は stage2 )をループバックアドレス(127.0.0.1)に指定します。

/etc/hostsファイルの127.0.0.1で始まる行を編集

127.0.0.1 localhost stage2

もしDNSがあるなら、/etc/hostsではなくてDNSサーバにレコードを追加しても良いですが、他のサーバからアクセスするのでなければ勿体をつけた方法かなと思います。

Apacheに新しいホスト名(stage2)を認識させる

ホスト名として何でもありの'*'を対象にしたVirtualHostの設定は既に入っています。 しかし複数のVirtualHost設定があった場合には、より細かくホスト名を指定した設定が優先されます。

今回はdebianの流儀に従って、まずは新規に設定ファイルを /etc/apache2/sites-available/stage2 に準備します。

新しく作成したstage2ファイルの内容

<VirtualHost stage2:80>
        ## global settings
	ServerAdmin webmaster@example.org
	DocumentRoot /var/www/stage2
	<Directory />
		Options FollowSymLinks
		AllowOverride None
		Order deny,allow
		Deny from all
		Allow from localhost
	</Directory>
        ## log settings
	ErrorLog /var/log/apache2/stage2.error.log
	LogLevel warn
	CustomLog /var/log/apache2/stage2.access.log combined
</VirtualHost>
設定ファイル上で変更するべきところ

DocumentRoot行と、その他の stage2 と書かれているところを適宜ホスト名に。

接続元はlocalhostだけから可能にしましたが、Windowsなどのホスト上でVMWareやVirtualBoxを動かしていて、Windows上のブラウザからアクセスしたい場合には、Allowで始まる行に適当なIPアドレスを指定してあげる必要があります。

外部からアクセスされても困らなければ、面倒を避けるために Allow from all にした方が良いかもしれません。

プライバシーやらと利便性は直交する場合が多いんですよね。他に良い方法があるのかな…。

/etc/apache2/sites-available/以下の設定を有効にする

作成したファイル名をキーにして、設定を有効にします。

$ sudo /usr/sbin/a2ensite stage2
$ sudo /etc/init.d/apache2 restart

コマンドを実行すると設定ファイルが /etc/apache2/sites-enabled/ 以下からリンクが張られ、リスタートする事で読み込まれて有効になります。

こういうスクリプトは設定を入れ替えたり、部分的に切り替えるには便利ですが、ファイルを作成するツールはないんですよね。

スクリプト化の利点はパスを把握する必要がないっていうところもあるかと思うのですが、 /etc/apache2/sites-available/とパスが判っていれば、 ln -s コマンドでも同じことができてしまいますし、こっちの方が確実そうに思えます。

まぁあらかじめファイルを準備しておく用途では問題ないんですけど、全工程を自動化するにはちょっと足りない印象があります。

Webブラウザから確認

Ubuntu上のGoogle Chromeで確認してみます。

$ google-chrome http://stage2/

さいごに

ログファイルを新しく作成したので、定期的に削除するのを忘れていましたが、/etc/logrotate.d/apache2 をみるとファイル名が .logで終っているファイル は自動的にローティションの対象になっていました。

/etc/logrotate.d/以下のファイルをみると、サブディレクトリ以下のファイルでもファイル名を指定しているものも珍しくはないので、本格的に運用をする場合にはログ周りの設定をちゃんとみることは重要です。

でもなぁ、適当なIPアドレスをばらまくような設定をしている施設もあるみたいだし、ログファイルなんてデフォルト設定のままにしているところもあるだろうなぁ。

"rotate 52"とか"rotate 4"とかの設定がバラバラになっている状態をみると、適切な値に保つ事は結構面倒なことなのかもしれません。

「syslogは管理者のもの、アプリは使うべからず」なんて場合もあるでしょうから。syslogがそんな切り分けをちゃんとやってくれれば良いんですよね…。できるかな…、できるか…。

0 件のコメント: