Apache配置代理后,Serverlet获取域名问题汇总

现场:

  使用Apache+Tomcat,Apache反向代理Tomcat的Serverlet,在Serverlet中获取请求的Host。

1、在apache配置文件中添加: ProxyPreserveHost on

   ProxyPreserveHost {on | off } //在反向代理中是否支持虚拟主机。如果启用此功能,代理会将用户请求报文中的Host:行发送给后端的服务器。

  打开了ProxyPreserveHost  就可以让Tomcat获取用户请求的Host了。

2、在Serverlet中使用req.getHeader 获取Host信息。

    req.getHeader("x-forwarded-host"); 得要服务器的域名

    req.getHeader("x-forwarded-server"); 得到服务器的域 

 

// Enumeration headerNames = request.getHeaderNames();
// while (headerNames.hasMoreElements()) {
// String key = (String) headerNames.nextElement();
// String value = request.getHeader(key);
// System.out.println(key + value);
// }
//
// System.out.println("x-forwarded-host:"+request.getHeader("x-forwarded-host"));
// System.out.println("x-forwarded-server:"+request.getHeader("x-forwarded-server"));
// System.out.println("referer:"+request.getHeader("referer"));

可以打印Header的内容。 

3、通过req.getHeader("referer") 可以做一下防盗链接。可以参考 https://blog.csdn.net/shenqueying/article/details/79426884

原文地址:https://www.cnblogs.com/mayt/p/12462911.html