Nginx的302redirect循环debugging

我的web应用程序nginx文件中有超过50多个位置匹配指令。 做了一些改变后,我坚持一个名为/login一个位置指令302redirect循环。 它保持redirect到302 /login,永远不会出去。 有没有什么办法在nginx指令,我可以设置一个断点,日志,从哪个位置指令的请求通过? 所以我得到一个想法,哪个是错误的redirect或位置来源?

我不认为debugging日志给出了这个信息。

简而言之,在整个configuration中,精确跟踪请求的最佳方式是什么?

为什么你有50多个位置匹配指令? 正确的解决scheme可能是使用map指令。

debugging意想不到的后果的正确方法是修改控制您的更改:

  • 如果做了一大堆修改,而且从来没有在两者之间进行过testing,那么可以使用像git-bisect这样的东西来找出违规指令。

  • 如果你已经知道这个变化,那么仔细检查每一个部分就会发现问题。

但是,根据您的屏幕截图的主机名,并检查您的服务器的响应:

 curl -v -k https://www.groupsitedev.com/login | & sed -E "s#^#`printf \\t`#g" … < HTTP/1.1 302 Moved Temporarily < Server: nginx/1.13.3 < Date: Sun, 27 Aug 2017 02:21:44 GMT < Content-Type: text/html; charset=utf-8 < Transfer-Encoding: chunked < Connection: keep-alive < X-Runtime: 2 < Location: https://www.groupsitedev.com/login < Cache-Control: no-cache < Set-Cookie: _session_id=882afb51754b1cd5deef94cb65457625; domain=.groupsitedev.com; path=/ < <html><body>You are being <a href="https://www.groupsitedev.com/login">redirected</a>.</body></html> 

…显示这个问题很可能与nginx无关,而且可能是上游执行的:

  • 您不太可能修改了默认的nginx 302处理程序来提供像<html><body>You are being <a href="https://www.groupsitedev.com/login">redirected</a>.</body></html>这样的文本<html><body>You are being <a href="https://www.groupsitedev.com/login">redirected</a>.</body></html> ,这不是默认的; 并且从一个低效率的上游来的redirect更有可能(nginx不会提供这样的自定义文本(带有超链接),因为将URL复制到一个没有现代浏览器的网页是无效的无论如何)

  • 你不太可能configurationnginx来发布会话cookie, 来自上游的cookie更有可能。

因此, 总而言之 ,在nginx中没有什么可以debugging的 – redirect显然是来自你的上游,你已经向我们透露了一切。

在每个位置块中,添加一个对该块唯一的标头。 使用这些头文件可以找出Nginxselect哪个块,这可以帮助您进行debugging。

 # Recommended location / { add_header Z_LOCATION "home"; } location /admin/ { add_header Z_LOCATION "admin"; } 

如果你愿意的话,你可以使用一个单独的头文件名,但是我想知道是否重写或者转发,或者这样会掩盖通过系统的path,所以我不这样做。

 # NOT recommended location / { add_header Z_LOCATION "home"; } location /admin/ { add_header Z_LOCATION "admin"; } 

使用Live HTTP Headers插件或“curl -i”使用Firefox查看URL /页面。 你添加的头文件会告诉你它打哪个块。 Live HTTP Headers优于Curl的优点是您不需要继续发出命令,Firefox将遵循redirect并向您显示每个请求/响应的标头。

你需要Nginx的headers_more模块来使add_header工作。 你可以检查你是否包含“nginx -V”。 如果你不这样做, 从源代码构buildNginx是相对容易的。

当我学习Nginx时,我发现这个技术非常有用,并且让我的网站build立起来。