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/;  此时最后的/不能添加。
  .....
}

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值