【问题标题】:Cookies after NGINX reverse proxyNGINX反向代理后的cookies
【发布时间】:2018-10-02 19:42:14
【问题描述】:

Rails 5.1 应用程序。

我的 ma​​in_domain.com 被广告拦截器拦截,因此用户无法使用指向我网站图片的直接链接。 我决定使用 new_domain.com + NGINX 反向代理将请求从 new_domain.com 重定向到 ma​​in_domain.com 并且它可以工作。 NGINX 配置:

server {
  server_name new_domain.com;

  location / {
      proxy_set_header X-Connecting-IP $remote_addr;
      proxy_pass https://main_domain.com;
  }
}

但是有一个新问题:反向代理后ma​​in_domain.com上的cookies丢失了。

奇怪的是,代理之后请求和cookies里面有正确的域:

pry(main)> request.domain
=> main_domain.com
pry(main)> cookies.request.domain
=> main_domain.com

但需要的密钥uniq_key 为空:

pry(main)> cookies[:uniq_key]
=> nil

虽然它是之前创建的,但如果我打开 ma​​in_domain.com,它在浏览器开发控制台中可见。

为什么 cookie 是空的,我该如何读取它们?提前致谢。

【问题讨论】:

  • 可能不是最安全的方法,但为什么不将 cookie 添加到您要代理的 URL,然后根据参数重新分配 cookie?
  • @Mark 在代理之前我无法从main_domain.com 读取cookie,因为我有https://new_domain.com/image.jpg 类型的URL,它被代理到https://main_domain.com/image.jpg,然后我才希望在里面读取cookies[:uniq_key]应用程序。

标签: ruby-on-rails nginx cookies reverse-proxy


【解决方案1】:

(1) 重定向代理是有区别的。前者是当服务器发出特殊的 HTTP 状态以及新的资源位置并且浏览器向新位置发出新请求时。所以这里的浏览器发出两个请求。后者是您的服务器将请求转发 到另一台服务器。从浏览器的角度来看,它看起来好像是原始服务器返回了响应。

因此,根据您的源代码片段,您正在代理

(2) Cookie 属于域。当浏览器向 new_domain.com 发出请求时,它不会发送 ma​​in_domain.com 设置的 cookie,因为浏览器只向new_comain.com 发出一个请求,因为您正在执行代理,而不是重定向


我想我回答了你的问题“为什么”。我不知道“如何解决”,因为您的方法严重偏离了问题,我不知道可以进行哪些权衡或可以承受哪些更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-14
    • 2019-03-14
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多