*

Debian(Wheezy)でのApacheバーチャルホスト設定 サブドメインの作り方

投稿日:2014/01/06 最終更新日:2014/01/09

DebianのApacheは他の多くのディストリビューションと違い、設定ファイル構成や、モジュールやバーチャルホスト設定の有効・無効を切り替えるコマンドなど、他のディストリビューションに慣れていると結構クセがある。

このページでは”Debian”におけるバーチャルホスト設定に関するメモを書いておく。
内容は以下の通り。

 
※注意
一般的な趣味の自宅サーバ環境でのNAMEベースのバーチャルホスト設定のメモ。
つまり1つのIPアドレス、1台のサーバで複数のドメインを持ち込んだり、自由にサブドメインを利用するための設定。

テスト環境は Debian GNU/Linux Wheezy 64bit + Apache2.2.xx
持ち込んでいる独自ドメインのDNSレコードはa * で丸投げ状態。
Debian + Apache2系ならおそらくどれも同じだと思う。

 

Debianにおけるバーチャルホスト設定の基礎知識

DebianのApache2ではバーチャルホスト設定の為に2つのディレクトリが存在する。
/etc/apache2/sites-available と /etc/apache2/sites-enabled がそれ。

シンプルに書くと、以下の2つの工程で簡単にバーチャルホスト設定ができる。

1. /etc/apache2/sites-available 内に設定ファイルを作成する
2. a2ensite コマンドで作成した設定を有効にする
(/etc/apache2/sites-enabled 内にシンボリックリンクが作成される)
 

設定の削除は「a2dissite」コマンドで行うことができる。
/etc/apache2/sites-enabled 内にある指定した設定を削除する事が出来る。

sites-available 内にどれだけ設定ファイルを作成しても、a2ensiteで有効化しなければ反映はされない。
また、設定を削除したくても、sites-available 内の設定ファイルだけ削除するのは無意味。

a2ensite  ... - 指定した設定を有効にする
a2dissite ... - 指定した設定を無効にする

 

バーチャルホスト設定(サブドメイン設定)

example.com ドメインを使用する体で書く。
(example.com は自分が所持しているドメインに置き換えて考える)

初期状態では default という設定ファイルが存在し、sites-enabled 内には 000-default がある。
この初期設定は削除する。
default を書き換えて利用するのもありだけど、独自ドメイン毎にドメイン名で設定ファイルを作っていく方が視覚的に判りやすい。
(必ずしも削除の必要性があるものではないケド)

削除(設定を無効化する)コマンドは以下の通り。
(sites-available 内の default も使わないなら削除して良い)

# a2dissite 000-default

 

設定ファイルを作る。
ファイル名とドメイン名は必ずしも一致する必要はないけど、後で見たときに一目で中身がわかるようにドメイン名にしておくのがベターだと思う。

# vi /etc/apache2/sites-available/example.com

 

<VirtualHost *:80>
	ServerAdmin admin@example.com
	ServerName example.com
	DocumentRoot /home/username/example.com/
	<Directory /home/username/example.com/>
		Options All
		AllowOverride All
		Order allow,deny
		allow from all
	</Directory>
	ErrorLog /var/log/apache2/example.com/error.log
	LogLevel warn
	CustomLog /var/log/apache2/example.com/access.log combined
</VirtualHost>

 

概ねこのような感じ。
項目別にもう少し詳しく書いていく。

<VirtualHost *:80>
port80 で受ける場合ここは常にこれで良い。
port80 でない場合は該当のportに差し替える。

ServerAdmin
管理者のメールアドレスを書く。

ServerName
持ち込みたいドメインもしくはサブドメインを書く。
ここに書いた名前でアクセスがあった場合にこの設定が適用されると覚える。

example.com を持ち込むには example.com を書き、example.net であれば example.net と書く。
サブドメイン設定をする場合はここに、any.example.com と好きな文字列を当ててやるだけ!

DocumentRoot
その名の通りドキュメントルートを書く。
デフォルトでは /var/www/ になっているけど例では /home/username/ 以下。
もちろん好きなところに設定して良い。

/home/username/example.com にすると、/home/username/example.com/index.html が http://example.com/ のトップページになる。

<Directory /home/username/example.com/>
DocumentRoot と同じ場所にする。
この中身(Optionsなど)については以下。

– Options
例にあるALLはおそらく無難ではない。
FollowSymLinks だけ書いている人が何故か多い。

Indexes > index.htmlが存在しない場合ファイル一覧を表示
FollowSymLinks > シンボリックリンクの許可
ExecCGI > これにPHPは含まれてないので注意
Multiviews > 最適なコンテンツを自動的に選択して応答する

– AllowOverride
.htaccess の許可設定。
None であれば基本的に許可されない。

– Order
allow,deny では基本的にアクセスを拒否し、allow に明記されたアクセスを許可する。
allow from all となっているので、この設定では結局全面的に許可している。

ErrorLog /var/log/apache2/example.com/error.log
エラーログの場所を書く。
/var/log/apache2/ 内にドメイン毎にログディレクトリを作れば判りやすくて良い。
error.log は作る必要はない。

LogLevel warn
特に変更はいらない。

CustomLog /var/log/apache2/example.com/access.log combined
アクセスログの場所を書く。
/var/log/apache2/ 内にドメイン毎にログディレクトリを作れば判りやすくて良い。
error.log と同じディレクトリで良いのでまとめて1つ作ればよい。
access.log は作る必要はない。
 
別のドメインをやサブドメインを作るときは、同じように設定をしてやればいい。
つまるところ、Apacheが接続を受けた際に ServerName で指定されている名前で接続されていたらその設定を利用するというだけの事。

 

設定ファイルを書き終わり保存したら、設定反映前にまずログディレクトリを作る。
ログファイルそのものは自動的に作られるのでディレクトリだけでよい。

ドキュメント用のディレクトリも作られていないなら同様に作っておく。

# mkdir /var/log/apache2/example.com
# mkdir /home/username/example.com

ログディレクトリが出来たらいよいよ設定ファイルのシンボリックリンクを作る

# a2ensite example.com

a2ensite コマンドが正常に実行されたら /etc/apache2/sites-enabled/ 内に example.com が出来ているはず。
確認出来たらApacheを再起動したら反映される。

# /etc/init.d/apache2 restart

もし書き間違いがあったらこの時にApacheがエラーを出すはず。
冷静に問題点を見つけよう。

 

設定したのにアクセス出来ない時

独自ドメインを利用する場合、DNSレコードの設定が必要になる。
バーチャルホストの設定だけしても、DNSレコードがちゃんと設定されていなければ意味が無いし、これらを理解していないと後々かなり混乱することになる。

設定はどこでドメインを取得しているかによるので省くけど、大雑把に aレコードは * で丸投げしてやれば問題ない。

a * 111.111.111.111(自分のIPアドレスと仮定)

example.com の Aレコードを上記のように設定した場合、example.com へのアクセスを自分のIPアドレスにポイントするのは当然として、a.example.com www.example.com abc.def.ghi.example.com など存在しうる全てのサブドメインへのアクセスも自分のIPアドレスにポイントされる。

つまり、example.com しか設定がない場合、any.example.com でも同じサイトが表示されてしまう。
その問題の解決は次の項目で解決できるので読んで欲しい。

とにかく全て放り投げてApache側で処理してしまおう。

 

存在しないサブドメインを404にする

先ほど書いたとおり、例えば example.com と trip.example.com の設定を作って2つのサイトを運用した場合、a.example.com も www.example.com も a.b.c.d.example.com も http://example.com/ を表示してしまう。

これはNAMEベースのバーチャルホストの場合、存在しないドメインでのアクセスは一番上の設定ファイルが担当するから起こる。
削除した default のシンボリックリンクが 000-default だったのは、ユーザが追加で設定を書いてそこで対応できないのを default 設定で受けるためと思われる。

そこからも判るとおり、この問題の解決方法は、今後想定されるどの設定ファイルよりも一番上に来る設定ファイルは存在しないサブドメイン用にする事だ。

 

基本的に数字から始まるサブドメインは使う予定は無いけど、一応念を入れて00から始まる設定ファイル名で作った。
(一番上であれば必ずしも0から始まる必要はない)

# vi /etc/apache2/sites-available/00-404

 

<VirtualHost *:80>
	ServerName dummy
	Redirect 404 /
</VirtualHost>

なんとたったこれだけ。
これを有効化すると、存在しないサブドメインに対しては一番上の設定が適用される為404リダイレクトされる。

 

wwwありとwwwなしの統一設定

www. ありと www. なしで同一のページを表示させておくのは宜しくない。
サーバを持ってない(触れない)人はhtaccessでこの設定を行うのが普通だけど、サーバ所有者組みはバーチャルホストで設定しておきたい。

ここまでの設定では、ServerName で指定しなかったwww.ありかなしのどちらかが有効になっているけど、それではもう片方は設定に入ってないので404になっているハズ。
これをちゃんとリダイレクトしてやる。

<VirtualHost *:80>
	ServerName www.example.com
	Redirect permanent / http://example.com/
</VirtualHost>

これも4行。
www.ありで運営している場合は ServerName と Redirect が逆になる。

 

サーバ関連でオススメの書籍

  • このエントリーをはてなブックマークに追加
  • Pocket
  • 1 follow us in feedly

関連記事

新着記事

no image

【WordPress】WP Super Cacheで設定時に500エラーが出るときの対処法

WordPressのページキャッシュ用にWP Super Cacheと...

記事を読む

【Debian】mysqlのスロークエリログを取得する手順

VPSにWordPressをインストールしていると、キャッシュプラグイ...

記事を読む

no image

MIFES10でUWSCの予約語・キーワードを明示する

最近エディタにはMIFES10を利用しているが、UWSCの利用頻度が上...

記事を読む

no image

WordPressでメニューが文字化けする

WordPressでメニューを編集した際、保存を押すと文字化けが起きた...

記事を読む

no image

WEBサイトキャプチャーツール「CrenaHtml2jpg」が便利

WEBサイトのキャプチャを作成したい事は多々ある。 これまでは He...

記事を読む

コメント/トラックバック

トラックバック用URL:

この投稿のコメント・トラックバックRSS




管理人にのみ公開されます

no image
【WordPress】WP Super Cacheで設定時に500エラーが出るときの対処法

WordPressのページキャッシュ用にWP Super Cacheと...

【Debian】mysqlのスロークエリログを取得する手順

VPSにWordPressをインストールしていると、キャッシュプラグイ...

no image
MIFES10でUWSCの予約語・キーワードを明示する

最近エディタにはMIFES10を利用しているが、UWSCの利用頻度が上...

no image
WordPressでメニューが文字化けする

WordPressでメニューを編集した際、保存を押すと文字化けが起きた...

no image
WEBサイトキャプチャーツール「CrenaHtml2jpg」が便利

WEBサイトのキャプチャを作成したい事は多々ある。 これまでは He...

→もっと見る

PAGE TOP ↑