nginxは HTTP リクエストに対して、最初にどのサーバでそれを処理すべきか
を決定します。その際に用いられるのが、リクエストヘッダ中の Host フィールド
です。以下の例では、このHost フィールドと server_name
が一致した
場合、該当するサーバ設定が採用されます。
server { listen 80; server_name www.test.jp w3.test.jp; ... } server { listen 80; server_name www2.test.jp; ... } |
一方、もしこれらの server_name
と Hostフィールドの名前が一致
しなかった場合には、デフォルトのサーバでリクエストは処理されます。
デフォルトのサーバは、最初に定義されているサーバになります。
従って、上の例では、www.test.jp
が該当します。
もし、デフォルトサーバを一番目のサーバではなく、指定したサーバで
処理させたい場合には、default_server
パラメータを listen ディレクティブ
に用いることが出来ます。
server { listen 80 default_server; server_name www2.test.jp; ... |
ちなみに、もしもあるサーバを一時的に閉鎖し、アクセス不能にするには、 以下のように code 444 を返すとコネクションを切断するように出来ます。
server { listen 80; server_name www.test.jp; return 444; } |
あるいは、該当エラーに対してエラーページを返す場合には、以下のようにします。
server { listen 80; server_name www.test.jp; error_page 404 /404.html error_page 500 502 503 504 /50x.html } |
ここで、error_page
ディレクティブは以下の構文を持っています。
error_page code ... ![]() ![]() |
uri に指定したファイルが該当コードのエラーに対して
返されます。error_page
は、http, server, location, if in location
などのブロックに書くことが出来、設定がなければ上位の設定を継承します。
"=response" を使うと、応答コードを変更することが出来ます。
error_page 404 =200 /empty.gif |
サーバ名をサーバのホスト名にしたい場合には、$hostname
変数が使えます。
server { server_name $hostname; } |
一方、もしリクエストが、サーバ名の代わりにIPアドレスを利用していた
場合、Host ヘッダにはIPアドレスが使われるでしょう。そのような場合には、
IPアドレスを server_name
に指定しておかなければなりません
(あるいは、default_server
が適切に設定されていることが必要です)。
server { server_name $hostname 192.168.1.1; } |
また、もし Host ヘッダがないリクエストが来た場合には、サーバ名は空(empty name)
として扱われます。このような場合にについて対応したい場合には、サーバ名に
""
を利用します。
server { server_name $hostname "" 192.168.1.1; } |
あるいは、もしも server_name
ディレクティブがサーバブロックに
なかった場合には、nginx はサーバ名として空である(""
)と考えます。
一方、全てにマッチするサーバ名は提供されておらず、default_server
を
利用することが推奨されています。
location /photo/ { alias /data/images/; } |
この場合、URI /photo/1.jpg
のリクエストに対して、
ファイル /data/images/1.jpg
が返されるようになっています。