たまに設定すると細かなところ忘れてて躓いたりするんでまとめました
IPベースあるいは名前ベースでのバーチャルホスト設定がメインです。
#設定ファイル
DebianパッケージのApache2は以下のように設定ファイルが分散しています。
- /etc/apache2/apache2.conf
各サイト共通の設定とかApacheの基本設定を記述する。
- /etc/apache2/conf.d/*
conf.d以下のファイルに記述されている設定が追加される。
- /etc/apache2/httpd.conf
通常は空ファイル。普通はここに設定を記述しない。RHL系で言うhttpd.confの内容はapache2.confとports.confとmods-availableとsites-availableに記述する。なんかApache関連のパッケージがインストールされたりすると、ここに設定ファイルが入ってくる。
- /etc/apache2/ports.conf
待ちうけIPアドレスとポート番号、NameVirtualHostディレクティブを記述する。
- /etc/apache2/mods-available/*
使用可能なmodの設定ファイルが入っている。
- /etc/apache2/mods-enable/*
有効にするmodの設定ファイルへのシンボリックリンクが入っている。modを有効/無効にする際は、明示的にシンボリックリンクをいじる必要はなく、「a2enmod/a2dismod 設定ファイル名(拡張子はいらない)」コマンドで可能。
- /etc/apache2/sites-available/*
使用可能なバーチャルホストの設定が入っている。ホストごとに設定ファイルを分ける。
- /etc/apache2/sites-enabled/*
modと同様に、設定ファイルへのシンボリックリンクが入っている。これもa2ensite/a2dissiteコマンドがある。
#バーチャルホストの設定
##ports.conf
Listen 80
といったように待ち受けポートを記述。SSLを使う場合は、
Listen 443
と記述する。IPベースとポートベースのサイトが混在する場合は、
Listen 192.168.0.101:80
Listen 192.168.0.101:8080
Listen 192.168.0.102:80
のように記述する。
次に、名前ベースのホスティングを行い場合は、
NameVirtualHost *:80
のように記述する。固定アドレスのときはIPアドレスを明示的に記述してやってもよい。名前ベースのみの時は*で問題ない。
IPベースと名前ベース混在のホスティングを行いたい場合は、
NameVirtualHost 192.168.0.101:80
のように名前ベースのホスティングを行うIPアドレスに対してのみ記述する。
名前ベースのホスティングを行わないIPアドレスに関しては要らない。
##sites-available
sites-availableディレクトリ以下にサイト毎の設定ファイルを作成し記述していく。
<VirtualHost IPアドレス:ポート番号>
DocumentRoot /hogehoge/example1
ServerName www.exampl1.com
...
</VirtualHost>
のように記述していく。
ServerAliasだとかなんだのは普通にVirtualHostディレクティブ内部に記述していけば大丈夫。
NameVirtualHostを記述していれば、www.exampl2.comに関しても同様の設定を行うことにより、ServerNameのホスト名にあわせてホスティングを行ってくれます。
www.exampl1.comへのアクセスなら/hogehoge/example1を表示、www.exampl2.comへのアクセスなら/hogehoge/example2を表示といった感じです。
ここで、名前ベースのホスティングのみなら、IPアドレスは*で大丈夫です。ポートベースのホスティングも使用しないならポート番号も省略可能です。
また、複数のIPアドレスで同じサイトを表示したいとき(イントラネットとインターネットの間にある時等)は、スペースを空けてIPアドレス:ポート番号を複数記述すれば大丈夫。
#設定例
www.exampl1.comでサイト1、
www.exampl2.comでサイト2(SSL込み)を表示したいときの設定例を記述してみます。
www.exampl1.com:80, www.exampl2.com:80, www.exampl1.com:443(SSL用)のホスティングを行えばいいので、以下のように設定。
Listen 80
Listen 443
NameVirtualHost *:80
ポート443に関してはサイトが一つしかないのでNameVirtualHost *:443は必要ない(はず)。
<VirtualHost *:80>
DocumentRoot /hogehoge/example1
ServerName www.exampl1.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /hogehoge/example2
ServerName www.exampl2.com
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /hogehoge/example2
ServerName www.exampl2.com
</VirtualHost>
以下コマンドでサイトの設定を有効化
a2ensite example1
a2ensite example2
a2ensite example2-ssl
以上で動くはず。
さらに別IPアドレスのホスティングを行いたい場合は、*の代わりにIPアドレスを明示してやればよい。
まあhttp://httpd.apache.org/docs/current/ja/vhosts/に詳しく載ってるんでそれみたほうが手っ取り早いですが。