32

でリクエストを処理するために特定の場所が使用されたかどうかを知るにはどうすればよいでしょうかnginx

例えば:

# 1
location / {}

# 2
location ~ /[\w\-]+\.html {}

# 3
location ~ /\w+\.html {}

/mysiteURI likeが 2 番目ではなく 3 番目の場所で処理されているかどうかを確認するにはどうすればよいですか? add_header私はこの問題に使用する傾向があります:

location / {
    add_header location 1;
}

location ~ /(\w+\-)\.html {
    add_header location 2;    
}

location @named {
    add_header location named;
}

そして、より良い解決策があるか、またはデバッグ目的で個人的に何を使用しているかを知りたいですか?

4

3 に答える 3

41

どのブロックが使用されたかを確認したいだけで、それ以外の有効な結果を返すことを気にしない場合returnは、add_header.

location / {
    return 200 'location 1';
}

location ~ /(\w+\-)\.html {
    return 200 'location 2';    
}

location @named {
    return 200 'location named';
}
于 2016-10-28T02:19:51.060 に答える
18

このアプローチに関する警告の言葉。HTTP 応答 301 で使用される実際のヘッダーlocationであるため、デバッグ ヘッダーとして使用するのは悪い考えであることがわかりました。Location

したがって、(私のように)テストで次のようになる場合:

HTTP/1.1 301 Moved Permanently
...
Location: http://mydomain.com/banana/
location: banana

次に、ブラウザがびっくりして報告しDuplicate headers received from serverます。だからlocationdebug、安全なものを使ってください。

于 2014-02-26T20:31:54.340 に答える
12

add_header トリックは、私がそれを行う方法です。

私は今仕事中なので、テストすることはできませんが、error_logレベルを次のように設定した場合、ログファイルに何かが記録される可能性があります。

  • debug:これを機能させるには、nginxを使用してビルドする必要があります。コマンド--with-debugで確認できますnginx -V
  • notice: デバッグ ログが有効になっていない場合
于 2012-10-03T13:12:31.137 に答える