AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 870606
Accepted
Farhan
Farhan
Asked: 2017-08-27 10:53:19 +0800 CST2017-08-27 10:53:19 +0800 CST 2017-08-27 10:53:19 +0800 CST

Nginx 302 重定向循环调试

  • 772

我的 Web 应用程序 nginx 文件中有 50 多个位置匹配指令。在进行了一些更改后,我在一个名为 /login 的位置指令上遇到了 302 重定向循环。它一直重定向到 302 /login 并且永远不会退出。nginx指令中有什么方法可以设置断点,日志,请求从哪个位置指令传递?所以我知道哪个是错误的重定向或位置源?

我不认为调试日志提供了这些信息。

简而言之,在整个配置中精确且非常详细地跟踪请求的最佳方法是什么

nginx
  • 2 2 个回答
  • 3747 Views

2 个回答

  • Voted
  1. Tim
    2017-08-27T12:02:35+08:002017-08-27T12:02:35+08:00

    在您的每个位置块中,添加一个对该块唯一的标题。使用这些标头,您可以确定 Nginx 选择了哪个块,这可以帮助您进行调试。

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

    如果愿意,您可以使用单个标头名称,但我想知道重写或转发等是否会掩盖通过系统的路径,所以我不这样做。

    # 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 将跟随重定向并向您显示每个请求/响应的标头。

    您需要 Nginx 中的 headers_more 模块才能使 add_header 工作。您可以检查它是否包含在“nginx -V”中。如果你不这样做,那么从 source 构建 Nginx相对容易。

    当我学习 Nginx 并设置我的网站时,我发现这种技术非常有用。

    • 2
  2. Best Answer
    cnst
    2017-08-27T18:32:02+08:002017-08-27T18:32:02+08:00

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

    调试具有意外后果的更改的正确方法是对更改进行修订控制:

    • 如果进行了一大堆更改,并且从未在中间进行过测试,那么您可以使用类似的东西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>的文本,这不是默认值;并且更有可能从低效的上游重定向(nginx 不会提供这样的自定义文本(带有超链接),因为像这样多次复制 URL 到没有现代浏览器会出现的网页中是低效的反正)

    • 您不太可能单独配置 nginx 来发出会话 cookie;来自上游的 cookie 更有可能。

    因此,总而言之,在 nginx 中没有什么可调试的——重定向显然来自您的上游,您没有向我们透露任何内容。

    • 1

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve