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反向代理去除目录层级转发_第1张图片

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

经过查询资料,了解该情况原因为:  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/;  此时最后的/不能添加。
  .....
}

 

 

你可能感兴趣的:(服务器配置,工作总结,nginx,nginx反向代理)