ProxyPass、Proxy Reverse 或 AJP
Posted
技术标签:
【中文标题】ProxyPass、Proxy Reverse 或 AJP【英文标题】:ProxyPass, ProxyReverse vs AJP 【发布时间】:2010-11-13 22:29:35 【问题描述】:我目前有一个 Tomcat + Apache HTTP 服务器设置来服务我的 Java servlet:
ProxyPass /myservice http://localhost:8080/myservice
ProxyPassRerverse /myservice http://localhost:8080/myservice
这一切都很好,只是myservice
需要知道客户端 IP 地址,由于代理,该地址始终是 127.0.0.1。有没有办法获取真实IP地址? AJP 是一种选择吗?
doGet(HttpServletRequest request, HttpServletResponse response)
request.getRemoteAddr()
【问题讨论】:
【参考方案1】:这样做:
在 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: 不传递。
你可能不想要secure="true",我使用它是因为SSL 是在apache 层处理的,我需要tomcat 知道连接应该被认为是安全的。
【讨论】:
我的客户端被服务器配置拒绝:proxy:ajp://127.0.0.1:8009/tomcat 在error.log 中出现错误我不得不将代理 * 设置从拒绝全部更改为拒绝无在 /etc/apache2/mods-enabled/proxy.conf 只是在这里提到以供将来查找。 这对我帮助很大。我是个白痴,把http
换成了ajp
...哈哈!
请考虑修改您的 ProxyPassReverse 设置,因为根据humboldt.co.uk/2009/02/the-mystery-of-proxypas-s-reverse.html,这似乎是一个常见错误
@Jack:你链接的文章很有用,但是地址坏了。 humboldt.co.uk/the-mystery-of-proxypas-s-reverse 似乎有效。
伙计,你成就了我的一天!您的回复帮助了我两次。你是个天才。我可能会问,您是如何获得该领域的专业知识的?【参考方案2】:
您可以在请求标头中读取 X-Forwarded-For。
来自Apache mod_proxy documentation:
在反向代理模式下(例如,使用 ProxyPass 指令),mod_proxy_http 添加多个请求标头,以便将信息传递到源服务器。这些标题是:
X-Forwarded-For:客户端的 IP 地址。 X-Forwarded-Host:Host HTTP 请求头中客户端请求的原始主机。 X-Forwarded-Server:代理服务器的主机名。在源服务器上使用这些标头时要小心,因为如果原始请求已经包含这些标头之一,它们将包含多个(逗号分隔)值。例如,您可以在源服务器的日志格式字符串中使用 %X-Forwarded-Fori 来记录原始客户端 IP 地址,但如果请求经过多个代理,您可能会得到多个地址。
在您的 servlet 中,您将拥有:
doGet(HttpServletRequest request, HttpServletResponse response)
request.getHeader("X-Forwarded-For")
【讨论】:
注意:X-Forwarded_For
与 X-Forwarded-For
... 复制粘贴代码可能很危险 :)【参考方案3】:
这很简单:
<VirtualHost>
ServerName www.server.com
redirect / http://www.server.com/foo
ProxyRequests off
ProxyPass / ajp://localhost:8009/
</VirtualHost>
【讨论】:
以上是关于ProxyPass、Proxy Reverse 或 AJP的主要内容,如果未能解决你的问题,请参考以下文章