Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging nginx。测试用于处理请求的位置_Debugging_Nginx - Fatal编程技术网

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

Debugging nginx。测试用于处理请求的位置,debugging,nginx,Debugging,Nginx,我想知道如何知道某个特定位置是否用于处理nginx中的请求 例如: 我如何知道像/mysite这样的URI是否由第三个位置而不是第二个位置处理? 我倾向于在这个问题上使用: location / { add_header location 1; } location ~ /(\w+\-)\.html { add_header location 2; } location @named { add_header location named; } 我想知道有没

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

例如:

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

location / {
    add_header location 1;
}

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

location @named {
    add_header location named;
}

我想知道有没有更好的解决方案,或者您个人在调试时使用了什么方法?

添加头技巧是我将如何做到的

我现在正在工作,所以我无法测试,但是如果将
错误日志设置为
级别,您可能会在日志文件中得到一些信息:

  • debug
    :您的nginx需要使用
    --使用debug
    构建。要使其正常工作,您可以使用
    nginx-V
    命令进行检查
  • 注意
    :如果未启用调试日志记录

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

因此,如果(像我一样)在你的测试中,你最终得到以下结果:

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

然后,您的浏览器将崩溃,并报告从服务器收到的重复头。因此,请使用
locationdebug
或安全的方法。

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

location / {
    return 200 'location 1';
}

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

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

这仅在HTTP响应代码为200、204、301、302或304时添加标头。因此,它不会帮助您跟踪404s::对于后来的人来说:在nginx 1.7.5之后的版本(在Air发表评论几个月后发布)中,您可以在
add_header
中添加一个
always
参数,该参数将指示nginx始终添加404s,而不管状态代码如何。香蕉和柠檬比foo&bar更好:-)这是我见过的关于测试URI的最好答案。这真是一种很酷的方式。我有一个奇怪的问题,几乎没有一个位置工作。使用这个我在任何时候都能找到它。
add_header
技巧在您最想调试的环境中都不起作用:它不适用于4xx响应。
location / {
    return 200 'location 1';
}

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

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