ネームベースのVirtualHostで複数のポート、複数のドメインを設定する
Apache2.2.x で複数のポートで別のサイトを公開したい場合は、以下の設定で公開することが可能です。
Listen 80 Listen 8080 NameVirtualHost 172.20.30.40:80 NameVirtualHost 172.20.30.40:8080 <VirtualHost 172.20.30.40:80> ServerName www.example.com DocumentRoot /www/domain-80 </VirtualHost> <VirtualHost 172.20.30.40:8080> ServerName www.example.org DocumentRoot /www/otherdomain-8080 </VirtualHost>
ただし、Webブラウザで「http://www.example.com:8080/」を指定すると、www.example.org の方の DocumentRoot が閲覧できてしまいます。
また、「http://www.example.org/」とした場合は、逆に www.example.com の方のVirtualHost の DocumentRoot が閲覧できてしまいます。
これをどうにか制御して、指定したドメインとポートの組み合わせ以外は、アクセスできないようにしたいと思ってこんな感じで設定してみました。
上の VirutalHost の設定に以下の設定を追記。
# deny access <VirtualHost 172.20.30.40:80> ServerName www.example.org <Location "/"> Order allow,deny </Location> </VirtualHost> # deny access <VirtualHost 172.20.30.40:8080> ServerName www.example.org <Location "/"> Order allow,deny </Location> </VirtualHost>
冗長な設定の仕方であまり気に入らないのですが、こうすることで、意図しないドメインとポートの組み合わせでアクセスしてきた場合は、アクセス拒否をすることで防いでいます。
リダイレクトさせてしまってもいいかもしれませんが、どうするかは運用方法によるかと思います。そもそも意図しない組み合わせでアクセスしても問題ないのであれば、この設定はいらない訳です。
そもそも、一つの IP でポートを分けて構築する例ってあんまりないのかもしれないけど。。。