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()

相关推荐