nginx はどのようにリクエストを処理するか | english русский 简体中文 עברית 日本語 türkçe ニュース [en] nginx について ダウンロード [en] セキュリティ情報 [en] ドキュメント faq リンク [en] 本 [en] サポート [en] trac wiki nginx.com | |
This translation may be out of date. Check the English version for recent changes.
名前ベースの仮想サーバnginx はまず最初にどのサーバがそのリクエストを処理すべきなのかを決定します。手はじめに、3つすべての仮想サーバが port *:80 で待ち受けている単純な設定から見てみましょう: server { listen 80; server_name example.org www.example.org; ... } server { listen 80; server_name example.net www.example.net; ... } server { listen 80; server_name example.com www.example.com; ... }
この設定では nginx は、(ブラウザからの)HTTP リクエストの “Host” ヘッダだけを考査して、そのリクエストをどのサーバに振り向けるべきかを決定します。もし “Host” ヘッダがどのサーバ名ともマッチしない場合、またはリクエストにこのフィールドがまったく含まれていない場合は、nginxはこのリクエストをデフォルトサーバに振り向けます。上記の設定ではデフォルトサーバは最初のもので、これは nginx の標準的なデフォルトの挙動です。設定内の最初のサーバをデフォルトサーバにしたくない場合は、 server { listen 80 default_server; server_name example.net www.example.net; ... }
この
このデフォルトサーバは サーバ名未定義のリクエストの処理を防ぐ“Host” ヘッダが未定義のリクエストを処理させたくない場合は、リクエストを単にドロップさせるデフォルトサーバを設定できます: server { listen 80 default_server; server_name _; return 444; } ここでは存在しないドメイン名 “_” をサーバ名として選択し、接続を閉じる nginx の特別な標準外コード 444 を返します。このサーバ用にサーバ名を設定しなければならないことに注意してください。さもなければ nginx はホスト名を使用します。 名前ベースとIPベースをミックスした仮想サーバ異なるアドレスで待ち受けている仮想サーバのより複雑な設定をみてみましょう: server { listen 192.168.1.1:80; server_name example.org www.example.org; ... } server { listen 192.168.1.1:80; server_name example.net www.example.net; ... } server { listen 192.168.1.2:80; server_name example.com www.example.com; ... }
この設定では、nginx はまず最初に
すでに述べたように、デフォルトサーバは server { listen 192.168.1.1:80; server_name example.org www.example.org; ... } server { listen 192.168.1.1:80 default_server; server_name example.net www.example.net; ... } server { listen 192.168.1.2:80 default_server; server_name example.com www.example.com; ... }
単純な PHP サイトの設定では、典型的で単純な PHP サイトで nginx がどのようにロケーション(location)を選択してリクエストを処理するのかを見てみましょう: server { listen 80; server_name example.org www.example.org; root /data/www; location / { index index.html index.php; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
nginx はまず最初に、リストの順序には関係なくリテラルな文字列によって指定されているもっとも限定されたロケーションを検索します。上記の設定では唯一のリテラルなロケーションは すべてのタイプのロケーションはクエリー部分を除いたリクエスト URI 部分のみを考査することに注意してください。これはクエリー文字列の引数がいろいろな方法で渡されることがあるためです。例えば: /index.php?user=john&page=1 /index.php?page=1&user=john さらに、クエリー文字列ではどのようなリクエストでも可能だからです: /index.php?page=1&something+else&user=john
では、上記の設定ではどのようにリクエストが処理されるのかを見てみましょう:
|