nginx locationマッチング

2468 ワード

次に、典型的な簡単な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は接頭辞マッチングを使用して最も正確なlocationを見つけます.このステップでnginxは、locationがプロファイルに現れる順序を無視します.上記の構成では、一意の接頭辞マッチングlocationは「/」であり、任意のリクエストにマッチングできるため、最後の選択として扱われる.次にnginxは、構成中の順序で正規表現のlocationを順次マッチングし続け、最初の正規表現にマッチングした後、検索を停止する.一致するlocationが使用されます.正規表現のlocationに一致しない場合は、見つかったばかりの最も正確な接頭辞で一致するlocationを使用します.
すべてのlocationマッチングテストでは、パラメータセクションではなく要求されたURIセクションのみが使用されることに注意してください.これは、次のようなパラメータを書く方法が多いからです.
/index.php?user=john&page=1
/index.php?page=1&user=john

それ以外に、要求列に任意の文字列を追加できます.
/index.php?page=1&something+else&user=john

次に、上記の構成を使用して、リクエストがどのように処理されているかを見てみましょう.
  • は、「/logo.gif」が最初にlocation「/」に一致し、次いで、上正規表現「\.(gif|jpg|png)$」に一致することを要求する.したがって、後者によって処理されます.「root /data/www」命令に従って、nginxは要求をファイル/data/www/logo.gif」にマッピングし、このファイルをクライアントに送信する.
  • 要求「/index.php」は、まずlocation「/」にも一致し、次いで、上正規表現「\.(php)$」にも一致する.したがって、後者によって処理され、localhost:9000で傍受されているFastCGIサーバに送信される.fastcgi_param命令は、FastCGIのパラメータSCRIPT_FILENAMEの値を「/data/www/index.php」に設定し、FastCGIサーバがこのファイルを実行する.変数$document_rootはroot命令設定の値に等しく、変数$fastcgi_script_nameの値は要求されたuri、「/index.php」である.
  • は、「/about.html」がlocation「/」にのみ一致することを要求するため、このlocationを使用して処理される.「root /data/www」命令に従って、nginxは、要求をファイル「/data/www/about.html」にマッピングし、このファイルをクライアントに送信する.
  • が「/」を要求する処理は、より複雑である.上のlocation"/"にのみ一致するため、このlocationを使用して処理されます.その後、index命令は、そのパラメータと「root /data/www」命令からなるファイルパスを使用して、対応するファイルが存在するか否かを検出する.ファイル/data/www/index.htmlが存在せず、/data/www/index.phpが存在する場合、このコマンドは、クライアントから送信されたように、内部リダイレクトを実行し、nginxは「/index.php」に一致するlocationを再検索します.前に見たように,このリダイレクト要求は最終的にFastCGIサーバに渡されて処理される.