foldrr's weblog

旧ブログ http://d.hatena.ne.jp/foldrr/

Apache httpd.conf の ServerName の意味

名前の通り、サーバー名を設定する。
Apache 2.2 ではデフォルトでコメントアウトされているが、これを有効にする場合は注意が必要。
というのも、
http://www.atmarkit.co.jp/flinux/rensai/apache05/apache05b.html
によると、
ブラウザからサイトアドレスの最後にスラッシュを付けないでアクセスした場合にサイトに繋がらなくなる可能性があるため。

クライアントはサーバが返す ServerName を「正しいサーバ名」だと思ってしまう。
問題が発生するまでの流れは以下の通り。

  1. サーバは最後にスラッシュが付かないとファイルだと思う。
  2. サーバはファイルが存在しない場合は同名のディレクトリを探す。
  3. サーバは同名のディレクトリが存在する場合 301 を返す。
  4. サーバは 301 を返す際にサーバー名として ServerName を返す。
  5. クライアントは 301 を受け取るとリダイレクトする。
  6. リダイレクトのアドレスとしてサーバから受け取った ServerName を使う。
  7. ServerName が存在しない名前だと 404 が発生する。

参照

合わせて UseCanonicalName ディレクティブも参照すること。
UseCanonicalName Off の場合、ServerName の設定は適用されない。