最近工作中遇到了一个问题,基于Cookie传递实现的两个系统单点登录,在我本地是可行的,但是实际生产环境下,两个系统分别部署在不同服务器上,也没有做域名关联,所以没法通过子域名的形式去传递
Cookie,所以想到了在其中一台机器上代理另一台机器,这样就能解决Cookie的跨域问题,想法是美好的,但是实际操作起来,遇到了不少坎坷,因为对nginx还不是那么熟悉,所以网上查了一堆资料,
例如在 代理location下增加 proxy_cookie_domain、proxy_cookie_path,但是都不太行。
也试过在server里加上header,效果都不太理想。尝试了好久,还是没办法将Cookie传递过去,最后在一位大佬指点下,在location里加上了以下配置,终于可以了
proxy_set_header Host $host:$server_port; # $http_host
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
加上了代理请求头,才会让服务器认为是同一个请求,这样Cookie就会当作同一个域下的,自然也就不存在跨域的问题了。
PS:写文章果然还是得趁着bug刚解决激情犹在的时候写啊,这种事后总结我感觉记录得可能不是特别详细,当然我本身也比较懒,所以草草写了一些,也不知道大伙能不能看懂,不懂的话欢迎留言讨论。