关于nginx没有跳转到upstream地址的解决
2019-09-12 14:05
2426 查看
前言
今天在nginx碰到一个很奇怪的问题,在前端tomcat跳转页面的时候跳转的是upstream的地址,直接就报404,但是有些页面访问又是正常的。
http://tomcat/tomcat-web/account/index
如果直接用内网ip访问是正常的,所以可以判定是nginx的问题,nginx配置如下
upstream tomcat { server 192.168.11.172:8061; server 192.168.11.172:8062; ip_hash; } server { listen 8060; server_name www.example.com; location / { proxy_pass http://tomcat; proxy_set_header Host $host:8060; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; index index.html index.htm; } }
经过排查发现,因为在后端java代码中,这个地址是用重定向跳转,里面用到request.getServerPort()如果是通过nginx跳转是获取不到前端正确的端口,默认返回的仍然是80,如果nginx的监听的端口默认不是80的话,response.sendRedirect 就无法跳转到正确的地址。
response.sendRedirect(getBasePath(request) + "account/index");
private String getBasePath(HttpServletRequest request) { String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; return basePath; }
解决方法是在nginx的配置文件proxy_set_header上加上端口号
proxy_set_header Host $host:$proxy_port;
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
相关文章推荐
- 关于vagrant+virtualbox 的虚拟机桥接网卡没有地址的解决方法
- react-router路由地址变了页面却没有跳转的解决办法
- 关于锚点页内链接跳转出现问题(不响应,没有反应)的解决方法(ZT)
- nginx: [emerg] unknown directive "ssl" in 关于nginx的ssl模块没有编译进去的解决办法
- 关于锚点页内链接跳转出现问题(不响应,没有反应)的解决方法(ZT)
- 解决apache/nginx做反向代理导致request.getServerName()外网环境获取不到代理地址(或域名)的问题
- 关于WIN10 edge浏览器报错 找不到DNS地址 错误代码:INET_E_RESOURCE_NOT_FOUND 的解决方法
- 关于DateReport没有Orientation属性的解决方法
- Nginx转发地址解决跨域问题
- 关于解决struts2中xml没有提示的问…
- 关于VMware下安装VMware tools,安装文件没有出现问题的解决
- java项目跑起来后用IE访问,只要地址中有中文,就访问不到,显示访问受限,但是用谷歌、火狐等浏览器没有问题,解决方法
- 关于volley请求没有回调信息的解决方法
- 关于程序集生成失败 -- 引用的程序集没有强名称的解决办法
- 关于web项目创建后WEB-INF下面没有出现web.xml的解决方法
- fragment没有getWindowManager 关于fragment下的报错解决方法
- Docker内nginx使用301强制http跳转https,解决请求http无数据返回问题
- 关于“Exchange Server 地址列表服务未能响应”的错误解决方法
- 关于dll 中没有可放置在工具箱上的组件的解决技巧
- 关于你没有权限在此位置中保存文件的问题解决