Tomcat获取Nginx反向代理的客户端域名
程序员文章站
2022-03-19 08:27:26
问题
nginx反向代理之后,tomcat应用通过request.getheader("host")取到的是nginx的host,并非客户端浏览器地址栏上的真实域名。...
问题
nginx反向代理之后,tomcat应用通过request.getheader("host")
取到的是nginx的host,并非客户端浏览器地址栏上的真实域名。
例如在某一台服务器上,tomcat的端口号为8080,nginx的端口号为80,nginx反向代理8080端口。
server { listen 80; location / { proxy_pass http://127.0.0.1:8080; } }
在另一台机器上用浏览器打开访问tomcat下的应用,获取客户端域名。
system.out.println(request.getheader("host"));
结果是:
localhost:8080
问题产生的原因
nginx的反向代理实际上是客户端和真是的应用服务器之间的一个桥梁,客户端(一般是浏览器)访问nginx服务器,nginx再去访问web应用服务器。对于web应用来说,这次http请求的客户端是nginx而非真实的客户端浏览器,如果不做特殊处理的话,web应用会把nginx当做请求的客户端,获取到的客户端信息就是nginx的一些信息。
问题解决
nginx配置http header。host包含客户端真实的域名和端口号
proxy_set_header host $http_host;
tomcat从nginx传递过来的http header中获取客户端信息。
<valve classname="org.apache.catalina.valves.remoteipvalve" />
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
推荐阅读
-
Nginx作为反向代理时传递客户端IP的设置方法
-
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
-
.Net Core/Framework之Nginx反向代理后获取客户端IP等数据探索
-
nginx反向代理后abp的webapi host如何获取客户端ip?
-
详解Linux中Nginx反向代理下的tomcat集群
-
nginx(https)反向代理tomcat(http)的实现教程
-
简单实现nginx+tomcat的反向代理与动静分离
-
使用nginx同域名下部署多个vue项目并使用反向代理的方法
-
Nginx反向代理多域名的HTTP和HTTPS服务的实现
-
关于.net core使用nginx做反向代理获取客户端ip的问题