nginx的。 测试哪个位置用于处理请求(nginx. Test which location

2019-08-01 03:00发布

我想知道我怎么知道,如果一个特定的位置,[S]用于处理请求nginx

例如:

# 1
location / {}

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

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

我怎么知道,如果像URI /mysite是第三个位置,而不是第二个处理? 我倾向于使用add_header这件事:

location / {
    add_header location 1;
}

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

location @named {
    add_header location named;
}

我想知道有没有更好的解决方案或你怎么亲自进行调试?

Answer 1:

该add_header诀窍是我会怎么做。

我的工作是正确的了,所以我无法测试,但你有可能会得到我,你设定的日志文件什么error_log水平:

  • debug :你的nginx需要使用内置--with-debug这个工作,你可以检查与nginx -V命令
  • notice :如果未启用调试日志记录


Answer 2:

如果你只是想看看用哪个块,并不在乎返回,否则有效的结果,它可能是更直接的使用return ,而不是add_header

location / {
    return 200 'location 1';
}

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

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


Answer 3:

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

所以,如果你测试你结束了这个(像我一样):

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

那么你的浏览器将怪胎和报告Duplicate headers received from server 。 因此,使用locationdebug什么是安全的。



文章来源: nginx. Test which location used to process request