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