Nginx 为什么只有在重新访问后跳转才有效?

您好,我需要根据特定的 cookie 将主页重定向到另一个域,并且该 cookie 将在用户首次访问时由后端服务添加。

当我第一次访问 URL 时,cookie 已按预期添加,但随后我单击页面上的一些按钮,这些按钮向静态文件和后端服务发送请求,此时我希望页面应该重定向到另一个域,因为 cookie 已经存在。 但是重定向不起作用,当我手动刷新页面时它起作用。

所以我想知道它有什么问题? 重定向是否仅限于某种类型的请求?
还是因为重定向在 if 块中(我知道 if 在 Nginx 中是邪恶的,但我得到了重定向并且 return 是安全的)?
那么,有人能帮我弄清楚吗? 我是 Nginx 的新手,在此先感谢。
下面是我的 Nginx 配置。

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        client_max_body_size 5000m;
        error_page 502 =203 /50x.html;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        if ($cookie_LUCKY_ONE) {
            return 301 http://anotherdomain.com;
        }
       index index.html;
       try_files $uri $uri/ /index.html;
    }
阅读 2k
1 个回答
第一次访问 URL 时,cookie 已按预期添加。

当浏览器向nginx发起请求时,获得了cookies。

单击页面上的一些按钮,这些按钮向静态文件和后端服务发送请求。

这些请求是独立于页面请求之外的请求,这些请求头部已经带有cookies信息,到达nginx后,nginx会按照设置中的要求将这些请求重定向。但是,nginx不会将整个页面重定向,因为对于nginx来说,整个页面的内容已经在上一次请求中返回了,它不可能再去操控浏览器的内容。

正确的做法是:在点击按钮时,用js判断有没有cookies,由js去重定向,而不是由nginx去重定向。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题