apache + tomcat 负载均衡模式下 getLocalAddr() 为null的解决办法
http://www.51lingguang.com/?p=504
在apache+tomcat负载均衡模式下,通过request.getLocalAddr()无法获取服务器端的ip地址,返回值为null的问题,查找了下,百度里没有有价值的回答,到官方网站上查找了下,说是:
TheAJPprotocolonlypassesthewebserverhostnameandport.ItdoesnotpasstheIPaddress.Therefore,getLocalName()willreturnwhateverispassedviaAJPbutgetLocalAddr()willalwaysreturnnull.
WhilstgetLocalAddr()couldbemodifiedtoreturntheIPaddressTomcatislisteningonforAJPconnections,Idon’tliketheinconsistencythatwouldgeneratewhencomparedtogetLocalName()andgetLocalPort().
因为AJP的转换,让java端获取不到服务器的ip地址,可以使用以下办法来获取服务器端的ip地址:
String currentIp = InetAddress.getByName(request.getServerName()).getHostAddress();
这个一直是获得负载服务器的IP
先通过request.getServerName()获取到访问域名,然后通过InetAddress.getByName(StringserverName)解析到ip地址,但格式是域名/ip的形式,再通过getHostAddress()获取到ip地址。
实际上如果需要通过域名解析到ip,也可以通过这个函数来获取:InetAddress.getByName(域名).getHostAddress()。