monoの開発ブログ

nginxで未定義のHostが入力されたときの対策

nginxで名前ベースのバーチャルホストを利用している場合、server_nameで指定していない未定義のHostヘッダが入力されると、マッチしないはずのserverからレスポンスが返ってきてしまいます。ここでは、存在しないHostが入力された場合に何も返さないように設定します。

まぁドキュメントを読めば分かることなんですが、今までこのページにたどり着けなかったので。

以下が未定義のHostが入力された場合にエラーを返すようにするための設定です。listenディレクティブにdefault_serverパラメータを記述すると、Hostがどのserverともマッチしなかった場合のデフォルトのserverとして扱われます。そして、returnディレクティブで444を返して接続を閉じています。server_nameには_などのドメイン名としてあり得ない文字列を指定してマッチすることがないようにしています。

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