欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

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" />

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接