我的 Web 应用程序 nginx 文件中有 50 多个位置匹配指令。在进行了一些更改后,我在一个名为 /login 的位置指令上遇到了 302 重定向循环。它一直重定向到 302 /login 并且永远不会退出。nginx指令中有什么方法可以设置断点,日志,请求从哪个位置指令传递?所以我知道哪个是错误的重定向或位置源?
我不认为调试日志提供了这些信息。
简而言之,在整个配置中精确且非常详细地跟踪请求的最佳方法是什么
我的 Web 应用程序 nginx 文件中有 50 多个位置匹配指令。在进行了一些更改后,我在一个名为 /login 的位置指令上遇到了 302 重定向循环。它一直重定向到 302 /login 并且永远不会退出。nginx指令中有什么方法可以设置断点,日志,请求从哪个位置指令传递?所以我知道哪个是错误的重定向或位置源?
我不认为调试日志提供了这些信息。
简而言之,在整个配置中精确且非常详细地跟踪请求的最佳方法是什么
在您的每个位置块中,添加一个对该块唯一的标题。使用这些标头,您可以确定 Nginx 选择了哪个块,这可以帮助您进行调试。
如果愿意,您可以使用单个标头名称,但我想知道重写或转发等是否会掩盖通过系统的路径,所以我不这样做。
使用带有Live HTTP Headers 插件或“curl -i”的 Firefox 查看 URL/页面。您添加的标题将告诉您它击中了哪些块。Live HTTP Headers 优于 curl 的优点是您无需继续发出命令,Firefox 将跟随重定向并向您显示每个请求/响应的标头。
您需要 Nginx 中的 headers_more 模块才能使 add_header 工作。您可以检查它是否包含在“nginx -V”中。如果你不这样做,那么从 source 构建 Nginx相对容易。
当我学习 Nginx 并设置我的网站时,我发现这种技术非常有用。
为什么你有 50 多个位置匹配指令?正确的解决方案可能是改用该
map
指令。调试具有意外后果的更改的正确方法是对更改进行修订控制:
如果进行了一大堆更改,并且从未在中间进行过测试,那么您可以使用类似的东西
git-bisect
来找出违规指令。如果您已经知道有问题的更改,那么仔细检查每个部分应该会发现问题。
但是,根据屏幕截图中的主机名,并检查服务器的响应:
...,表明此问题可能与 nginx 无关,并且可能在上游执行:
您不太可能修改默认的 nginx 302 处理程序以提供类似
<html><body>You are being <a href="https://www.groupsitedev.com/login">redirected</a>.</body></html>
的文本,这不是默认值;并且更有可能从低效的上游重定向(nginx 不会提供这样的自定义文本(带有超链接),因为像这样多次复制 URL 到没有现代浏览器会出现的网页中是低效的反正)您不太可能单独配置 nginx 来发出会话 cookie;来自上游的 cookie 更有可能。
因此,总而言之,在 nginx 中没有什么可调试的——重定向显然来自您的上游,您没有向我们透露任何内容。