我目前有一个Tomcat + Apache HTTP服务器设置来为我的Java servlet提供服务:
ProxyPass /myservice http://localhost:8080/myservice
ProxyPassRerverse /myservice http://localhost:8080/myservice这一切都很好,除了myservice需要知道客户端IP地址之外,由于代理的原因,客户端IP地址总是127.0.0.1。有没有办法获取真实的IP地址?AJP是一个选择吗?
doGet(HttpServletRequest request, HttpServletResponse response){
request.getRemoteAddr()
}发布于 2009-07-25 02:47:02
如下所示:
在apache配置中:
<Location /foo>
ProxyPass ajp://localhost:8009/foo
ProxyPassReverse ajp://localhost:8009/foo
</Location>然后在你的server.xml中:
<Connector port="8009"
enableLookups="false" secure="true" URIEncoding="UTF-8"
tomcatAuthentication="false"
protocol="AJP/1.3" />这应该会通过所有的东西。AJP协议传递信息,但http:不传递。
您可能不希望SSL值为“true”,我之所以使用它,是因为secure=是在Apache层处理的,我需要tomcat知道连接应该被认为是安全的。
发布于 2012-12-03 05:36:48
您可以读取请求头部中的X-Forwarded-For。
从Apache mod_proxy documentation
在反向代理模式下执行操作(例如,使用ProxyPass指令)时,mod_proxy_http会添加几个请求标头,以便将信息传递到源服务器。这些标头是:
在源站上使用这些标头时要小心,因为如果原始请求已经包含这些标头之一,则它们将包含多个(以逗号分隔)值。例如,您可以在源站的日志格式字符串中使用%{X-Forwarded- For }i来记录原始客户端的IP地址,但如果请求经过多个代理,则可能会获得多个地址。
在您的servlet中,您将拥有:
doGet(HttpServletRequest request, HttpServletResponse response){
request.getHeader("X-Forwarded-For")
}发布于 2010-12-13 16:25:26
这很简单:
<VirtualHost>
ServerName www.server.com
redirect / http://www.server.com/foo
ProxyRequests off
ProxyPass / ajp://localhost:8009/
</VirtualHost>https://stackoverflow.com/questions/1180974
复制相似问题