nginx locationルール優先度


ninxサーバは、Serverブロックの複数のlocationブロックの中で標準uriと要求文字列のマッチングがあるかどうかを検索し、複数のマッチングが可能であれば、最も整合度が高いものを記録する。その後、サーバは、ロカモーションブロック内の正則uriと要求文字列とをマッチングさせ、最初の正則uriがマッチングに成功したときに検索を終了し、このリクエストをこのlocationブロックを使用して処理する。正則一致がすべて失敗した場合、この要求は、先ほど記録された最も整合度の高いロカモーションブロックを使用して処理される。location優先度        inxの構成は以下の通りです。
server {
        listen       80;
        server_name  www.nginxtest.me s.nginxtest.me a.nginxtest.me;
        root /data/wwwroot/web/nginxtest.me/;
        #access_log /data/wwwroot/log/www.nginxtest.me-access.log main_zdy;
        access_log on;
        error_log /data/wwwroot/log/www.nginxtest.me-error.log;
        location / {
                        return 500;
        }
        location /testa/bb {
                return 501;

        }
        location /testb {
            return 404;
        }
        location /testb/bb {
            return 405;
        }
        location ~ ^/testa {
                return 503;

        }

        location = /testa {
                return 502;
        }
        
        location ~ ^/testa/bb {
                return 504;
        }
        
        location ^~ /testa/bb/cc {
                return 403;
        }
        location ^~ /testa/bb/cc/gg {
                return 402;
        }
}
1)「=」の優先度が一番高く、マッチングが成功すると他のマッチを停止します。  だから入力しますhttp://www.nginxtest.me/testa は502を返しますが、http://www.nginxtest.me/testa/   などは一致しません。    2)マッチがない場合、またはマッチがマッチしていない場合は正規マッチを使用します。  正則マッチは上から下に一度マッチしたら下には実行されません。だから上に書いた正則は正確なほどいいです。http://www.nginxtest.me/testa/bb 504ではなく503を返します。    3)正則マッチがマッチしていない場合は、空マッチで検索します。空マッチの順序は正則と一致していません。上から下までではなく、精度でマッチしますので、入力します。http://www.nginxtest.me/testb/bb は405.    4)特殊です  もし^~  接続されているのは標準的なurlである(必ず標準uriであれば)、一致した場合は正規のマッチングは行われない(優先度が正の場合より高い)。http://www.nginxtest.me/testa/bb/cc  http://www.nginxtest.me/testa/bb/cc/dd は、403を返します。    このようなマッチングも精度によってマッチします。http://www.nginxtest.me/testa/bb/cc/gg  402に戻ります        以上のように、もし私たちがlocationをたくさん書いたserverに、より正確なlocationを追加するには、3つの方法があります。     1このlocationのuriが確定すれば、標準uriを使って=号でマッチングできます。     2このlocationのuriが後ろの部分だけ確定していない場合は^^を使ってマッチングできます。例えば:location^~/testa/bb/cc  このように入力していますhttp://www.nginxtest.me/testa/bb/cc/dd またはhttp://www.nginxtest.me/testa/bb/cc?sdfdjf すべてマッチします。     3このuriは前と後ろの中間が確定していない場合、正則uriと書く必要があります。しかし、正則uriは他の整合可能なlocation~正則uriの前にいなければなりません。そうでなければ無効です。