nginx的。测试用于处理请求的位置

时间:2012-10-03 07:24:03

标签: debugging nginx

我想知道如何知道nginx中用于处理请求的特定位置。

E.g:

# 1
location / {}

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

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

我如何知道/mysite之类的URI是否由第三位而非第二位处理? 我倾向于使用add_header来解决这个问题:

location / {
    add_header location 1;
}

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

location @named {
    add_header location named;
}

我想知道是否有更好的解决方案,或者您个人用于调试目的是什么?

3 个答案:

答案 0 :(得分:23)

如果您只想查看使用了哪个块,并且不关心返回其他有效结果,则使用return而不是add_header可能更直接。

location / {
    return 200 'location 1';
}

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

location @named {
    return 200 'location named';
}

答案 1 :(得分:13)

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

因此,如果(在我测试中)你的测试结果是这样的话:

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

然后您的浏览器会惊慌失措并报告Duplicate headers received from server。因此,请使用locationdebug或安全的东西。

答案 2 :(得分:8)

add_header技巧是我如何做到的。

我现在正在工作,所以我无法测试,但你可能会在日志文件中得到一些东西,我将error_log级别设置为:

  • debug:您需要使用--with-debug构建nginx才能生效,您可以使用nginx -V命令
  • 进行检查
  • notice:如果未启用调试日志记录