32

我想知道如何知道某个特定位置是否用于处理nginx.

例如:

# 1
location / {}

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

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

我如何知道 URI like/mysite是否由第三个位置而不是第二个位置处理?我倾向于使用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

对这种方法提出警告。我发现location用作调试标头是个坏主意,因为Location它是 HTTP 响应 301 使用的真实标头。

所以如果(像我一样)在你的测试中你最终会得到这个:

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 回答