Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

nginx 配置之 proxy_pass 的 Cookie 转换

  proxy_pass 虽然是「想去哪儿就去哪儿」,但 HTTP 并不是完全无状态的。Cookie 就是万恶的大坑!即使我们使用 proxy_pass 将请求转发到别的地方,对方服务器写 Cookie 时肯定还是按照对方自己的标准来的。如果跨域做 proxy_pass 就会造成 Cookie 失效的问题。
  浏览器对 Cookie 有很多限制,如果 Cookie 的 Domain 部分与当前页面的 Domain 不匹配就无法写入 Cookie。所以如果请求 A 域名,服务器 proxy_pass 到 B 域名,然后 B 服务器输出 Domian=B 的 Cookie,前端的页面依然停留在 A 域名上,于是浏览器就无法将 Cookie 写入。
  不仅是域名,浏览器对 Path 也有限制。我们经常会 proxy_pass 到目标服务器的某个 Path 下,不把这个 Path 暴露给浏览器。这时候如果目标服务器的 Cookie 写死了 Path 也会出现 Cookie 无法写入的问题。
  以上这些问题,nginx 的 proxy 模块提供了 proxy_cookie_domainproxy_cookie_path 这两个指令来解决。它们像 rewrite 一样将 Cookie 中的 Domain 和 Path 给正则匹配并替换成别的东西。比如现在有 a.xxx 这个域名,希望将所有路由都从 b.xxx/ooo 上取资源,于是可以写这样的配置:
server { listen a.xxx:80; location /(.*) { proxy_cookie_domain a\.xxx b\.xxx; proxy_cookie_path /ooo /; proxy_pass http://b.xxx/ooo/$1; } }
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^