nginx反向代理去除目录层级转发

项目场景:

新系统上线,由于生产环境域名有限,分配域名时添加一层路径用于F5请求拦截分发。

使用中间件:

web: Nginx  ----> 主要用于请求转发,不做负载均衡策略。

应用:tomcat-9.0.36 --->处理业务逻辑

问题描述:

nginx 发送ajax请求时无法正确通讯

设定线上访问路径为: https://dev.test.com/cpp-test-project/page/index.html

上线时实际访问路径为: https://dev.test.com/cpp/cpp-test-project/page/index.html


原因分析:

由于申请机器以及域名时,未曾考虑到域名后会多一层路径。导致nginx的服务转发路径与实际应用路径不一致。

应用层的访问路径原本为   /cpp-test-project/test/test.do

实际部署后前台访问路径为: /cpp/cpp-test/project/test/test.do

解决方案:

修改nginx配置文件,对请求路径中的多余路径层级进行过滤

原请求转发配置:

location ~ \.do$ { 
  proxy_pass http://158.220.111.222
  ......

}

表示拦截所有以.do结尾的请求,并转发到 158.220.111.222服务器上。

修改为如下配置

location /cpp {
  proxy_pass http://ip<实际配置的转发请求ip>/;
  .....
}

在转发请求路径 http://ip 后添加 /表示 以 / 替换拦截 的 /cpp路径。

可以达到正确转发请求的效果。  

 

修改后经过测试发现。 由于转发路径拦截导致请求的session 与返回session路径不一致

对于需要校验会话或者获取会话信息的交易, 后台服务器获取不到正确的会话信息。

经过查询资料,了解该情况原因为:  nginx服务转发过滤路径后,导致原web端生成的请求session对应路径与后台服务生成的响应session路径不一致。 

解决方案: 

在nginx配置中添加cookie路径转换的配置

location /cpp {
  proxy_pass http://ip<实际配置的转发请求ip>/;
  proxy_cookie_path / /cpp/;  将 /路径对应到 /cpp/上
  .....
}

添加如上配置后,请求可以正常发送,登录等校验会话请求也正常。

 

注意:

  1、nginx配置 location 拦截请求过滤路径时,不能与正则表达同步使用。

location ~ /cpp/+.\.do {
  proxy_pass http://ip/;  此时最后的/不能添加。
  .....
}

 

 

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

qq_34394538

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值