nginx之proxy_cookie_path

遇到这样的问题,先描述一下:

  1. 有一个spring mvc项目——java-mall,通过tomcat部署
  2. tomcat使用18080端口,java-mall的war放到了tomcat的webapps目录里面,可以通过http://localhost:18080/mall访问,也就是说java-mall的contextPath是mall
  3. 通过nginx做反向代理

nginx反向代理配置如下:

location /java-mall{
  proxy_pass http://localhost:18080/mall;
}

起初我以为这样就够了,因为确实可以通过https://www.tangxuyang.cn/mall访问。不过当我准备测试接口时遇到了问题,调用登录接口后再调用别的接口一直报错,说未登录,那只能说是登录机制出来问题,更具体的是携带登录信息的媒介出了问题,当然是cookie没达到预期目标。

通过查看响应头,我发现SET-COOKIE中的path是mall,但浏览器地址是/java-mall,显然这个cookies是无效的。也就是说以后的接口请求头不会带着这个cookie。解决问题有三个方案:

  1. 把反向代理中的java-mall改成mall,这样就自然没问题了。但是我想添加java-前缀是因为,我还会实现一个别的语言的版本,比如node-mall抑或是python-mall。
  2. 修改war包的名称,从mall.war改成java-mall。
  3. 让nginx帮我们修改转发的cookie里的path,使用的是proxy_cookie_path

这里介绍的是第三种方案——proxy_cookie_path

proxy_cookie_path /mall /java-mall;

nginx -s reload,一切都正常了,世界是那么美好:)


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注