首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ProxyPass、ProxyReverse vs AJP

ProxyPass、ProxyReverse vs AJP
EN

Stack Overflow用户
提问于 2009-07-25 02:05:45
回答 3查看 37.4K关注 0票数 15

我目前有一个Tomcat + Apache HTTP服务器设置来为我的Java servlet提供服务:

代码语言:javascript
复制
ProxyPass /myservice http://localhost:8080/myservice
ProxyPassRerverse /myservice http://localhost:8080/myservice

这一切都很好,除了myservice需要知道客户端IP地址之外,由于代理的原因,客户端IP地址总是127.0.0.1。有没有办法获取真实的IP地址?AJP是一个选择吗?

代码语言:javascript
复制
doGet(HttpServletRequest request, HttpServletResponse response){
    request.getRemoteAddr()
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-25 02:47:02

如下所示:

在apache配置中:

代码语言:javascript
复制
<Location /foo>
  ProxyPass ajp://localhost:8009/foo
  ProxyPassReverse ajp://localhost:8009/foo
</Location>

然后在你的server.xml中:

代码语言:javascript
复制
<Connector port="8009" 
           enableLookups="false" secure="true" URIEncoding="UTF-8"
           tomcatAuthentication="false"
           protocol="AJP/1.3" />

这应该会通过所有的东西。AJP协议传递信息,但http:不传递。

您可能不希望SSL值为“true”,我之所以使用它,是因为secure=是在Apache层处理的,我需要tomcat知道连接应该被认为是安全的。

票数 23
EN

Stack Overflow用户

发布于 2012-12-03 05:36:48

您可以读取请求头部中的X-Forwarded-For。

Apache mod_proxy documentation

在反向代理模式下执行操作(例如,使用ProxyPass指令)时,mod_proxy_http会添加几个请求标头,以便将信息传递到源服务器。这些标头是:

  • X-Forwarded-For:客户端在主机HTTP请求中请求的原始主机client.
  • X-Forwarded-Host:的IP地址header.
  • X-Forwarded-Server:代理服务器的主机名。

在源站上使用这些标头时要小心,因为如果原始请求已经包含这些标头之一,则它们将包含多个(以逗号分隔)值。例如,您可以在源站的日志格式字符串中使用%{X-Forwarded- For }i来记录原始客户端的IP地址,但如果请求经过多个代理,则可能会获得多个地址。

在您的servlet中,您将拥有:

代码语言:javascript
复制
doGet(HttpServletRequest request, HttpServletResponse response){
  request.getHeader("X-Forwarded-For")
}
票数 5
EN

Stack Overflow用户

发布于 2010-12-13 16:25:26

这很简单:

代码语言:javascript
复制
<VirtualHost> 

 ServerName www.server.com

 redirect / http://www.server.com/foo

 ProxyRequests off
 ProxyPass / ajp://localhost:8009/

</VirtualHost>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1180974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档