0

私はこれらの2つのルールを持っています:

    location ~* ^.+\.(jpg|jpeg|gif|css|js|png)$ {
        proxy_pass http://127.0.0.1:44843$request_uri;
    }

    location /pc {
        proxy_pass http://127.0.0.1:12345$request_uri;
    }

URI :

/pc/asser/somefile.js

2 番目のルールに当てはまります。なぜですか?

「location /pc」ルールの優先度が低い問題ですか?

4

3 に答える 3

1

Nginxのドキュメントでは次のように定義されています。

ディレクティブは次の方法で処理されます。

  • 正確に一致する文字列が最初に処理されます。一致が見つかった場合、nginx は検索を停止し、リクエストを実行します。
  • 残りのリテラル文字列ディレクティブが次に処理されます。「^~」引数が使用されている場合、ngnix はここで停止し、リクエストを実行します。それ以外の場合、nginx は引き続き location ディレクティブを処理します。
  • 正規表現 (~ および ~* 引数を使用) で指定されたすべての場所ディレクティブが処理されます。正規表現がリクエストに一致する場合、nginx はここで停止し、リクエストを実行します。
  • 正規表現がない場合、または正規表現が一致しない場合、最も具体的なリテラル文字列の一致が使用されます。

したがって、 /pc にも正規表現を使用する必要があります。

場所 ~ /pc/.* {
  proxy_pass http://127.0.0.1:12345$request_uri;
}
于 2012-08-26T17:39:06.803 に答える
0

最初に、nginxはプレフィックス文字列(プレフィックスの場所)を使用して定義された場所を確認します。その後、正規表現を使用して定義された場所を、構成ファイルに表示される順序でチェックします。

于 2012-08-26T17:33:56.833 に答える
0

http://nginx.org/en/docs/http/ngx_http_core_module.html#locationは、nging ロケーション ディレクティブが参照される順序を指定します。

To find a location matching a given request, nginx first checks locations defined  
using the prefix strings (prefix locations). Among them, the most specific one is 
searched.

基本的にここでの問題は、接頭辞の場所が常に正規表現よりも優先されることです

したがって、構成で両方のブロックが一致する場合、/pc プレフィックスが優先されます

于 2012-08-27T07:07:39.763 に答える