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

Nem*_*den 21 debugging nginx

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

例如:

# 1
location / {}

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

# 3
location ~ /\w+\.html {}
Run Code Online (Sandbox Code Playgroud)

我如何知道URI /mysite是否由第三位而不是第二位处理?我倾向于使用add_header这个问题:

location / {
    add_header location 1;
}

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

location @named {
    add_header location named;
}
Run Code Online (Sandbox Code Playgroud)

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

Gra*_*ner 26

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

location / {
    return 200 'location 1';
}

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

location @named {
    return 200 'location named';
}
Run Code Online (Sandbox Code Playgroud)

  • 这非常方便。在“return”之前添加“add_header content-type text/plain;”以使其显示在浏览器窗口中。 (4认同)

Air*_*Air 14

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

所以,如果(在我测试中)你的测试中你最终得到了这个:

HTTP/1.1 301 Moved Permanently
...
Location: http://mydomain.com/banana/
location: banana
Run Code Online (Sandbox Code Playgroud)

然后你的浏览器会惊慌失措并报告Duplicate headers received from server.所以使用locationdebug或安全的东西.

  • 香蕉和柠檬比 foo & bar 好!:-) (3认同)

cob*_*aco 8

add_header技巧是我如何做到的.

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

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

  • `add_header` 技巧在您最想调试的情况下不起作用:它不适用于 4xx 响应。 (2认同)