对于我的一个项目,我需要连接一长串机器,这些机器本质上是代理彼此的 HTTP 请求。它就像这样:
Web 客户端 - A - B/C - D
当浏览器发出请求时,它首先经过位于用户本地机器上的薄 PHP 代理层,其目的是解决跨域请求等复杂问题。它代理到机器 B - 只是一个 nginx 实例,它重写 URL 并代理到 C。C 进行一些必要的修改,然后代理到 D,获取响应并将其返回到 Web 客户端。D 是一个无法触及的远程服务 API。
我在机器 C 上设置会话 cookie 时遇到问题,这一直追溯到原始请求。虽然可以设置 cookie,但当有新请求时,它在 Chrome 网络检查器中不可见,当我尝试从显然不存在的 cookie 中获取值时,节点 C 返回空指针异常。
我认为,这可以归结为调整 nginx 代理请求的方式。
答案1
检查 C 中 server {} 块中的 nginx 配置中是否有以下设置:
proxy_pass_header Set-Cookie;
proxy_pass_header P3P;
这足以传递 cookie。