地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

Apache servernameの話

httpリクエストのホストにvhostのどれにも当てはまらないservernameが来た際の動作

sampleのconf

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example.org

# Other directives here

</VirtualHost>

上記のような設定があるとしてhost名がwww.hoge.comのような感じでアクセスが来た際はconf内の記載順であるwww.example.comに入るらしい

↓公式から引用

アスタリスクはすべてのアドレスにマッチしますので、主サーバは リクエストを扱いません。www.example.com は 最初にあるため、優先順位は一番高くなり、default もしくは primary のサーバと考えることができます。つまり、リクエストが どの ServerName ディレクティブにもマッチしない場合、 一番最初の VirtualHost により扱われます。

バーチャルホストの例 - Apache HTTP サーバ バージョン 2.4

httpdでは1件目がデフォルトサーバとなるらしい。

ちなみにNginxの場合も1件目が優先されるのは同じであるがdefault_serverをつけることでhttpリクエストをそこへ振り分けることが可能となる。

server {
    listen       80  default_server;
    server_name  _;
    return       444;
}