movee(モビー) オノデラのブログ

(株)movee代表。週末は自社サービスを作っています。

nginxのrequestのさばき方について

参考:nginxがリクエストをどのように処理するか 日本語訳

nginx はどのようにリクエストを処理するか

nginx.conf

serverの基本的な設定

listenディレクティブ内のdefault_serverパラメータを使って、どのサーバがデフォルトかを明示的に設定することができる。

hogehoge.net www.hogehoge.netが優先される。

server {
    listen 80;
    server_name hogehoge.net www.hogehoge.net;
    ...
}

server {
    listen 80 default_server;
    server_name poyopoyo.net www.poyopoyo.net;
    root /var/www/src/public;
}

nginx は、(ブラウザからの)HTTP リクエストの “Host” ヘッダだけを考査して、そのリクエストをどのサーバに振り向けるべきかを決定する。もし “Host” ヘッダがどのサーバ名ともマッチしない場合やリクエストにこのフィールドが全く含まれていない場合は、listen ディレクティブに default_serverの設定があるパラメータに振り分けられる。上記2つの設定があるが、どちらにもマッチしない場合はlistenにdefault_serverの記述がある方に向けられる。

サーバ名未定義のリクエスト処理をドロップする

server {
    listen 80 default_server;
    server_name hogehoge.net www.hogehoge.net;
    ...
}

server {
    listen 80;
    server_name poyopoyo.net www.poyopoyo.net;
    root /var/www/src/public;
}

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

どこにも合わない場合は3つ目のdefault_server設定にリクエストがむく。server_name _;なので接続せずドロップ・アウトする。かつ、444を返す(444は接続を閉じる nginxのコード ) server_name _;の参考: Laravelプロジェクトをdeployerを使ってEC2にデプロイする