1

目前,我正在运行一个在 Tomcat 上运行的网站,该网站前面有 Apache,并使用清漆进行缓存。Tomcat 在端口上运行,端口8080用作81清漆后端。我需要实现一个功能,我需要知道访问该网站的客户端机器的 IP 地址。我试图通过 header 访问 IP 地址X-FORWARDED-FOR

当从端口 81(即http://mywebsite.com:81/)访问网站时,我可以获得客户端机器的 IP 地址,但不幸的是通过默认端口 80(即http://mywebsite.com/)访问时它返回本地主机 IP 地址 (127.0.0.1)。任何人都可以建议如何从端口 80 获取用户的真实 IP 地址吗?

4

1 回答 1

0

如果我理解正确,您的设置如下:

Varnish(端口 80)-> Apache(端口 81)-> Tomcat(端口 8080)

并且您希望实际的远程 IP 显示REMOTE_ADDR在 Tomcat 服务器上。

VarnishX-Forwarded-For默认附加标题,所以已经排序。要让 Apache 将实际的远程 IP 传递给 Tomcat,您应该为 Apache (mod_rpaf) 安装反向代理添加转发模块。mod_rpaf 完全符合您的要求。Apache 的适当配置是:

<IfModule !rpaf_module>
    LoadModule rpaf_module modules/mod_rpaf-2.0.so
</IfModule>

<IfModule rpaf_module>
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 127.0.0.1
    RPAFheader X-Forwarded-For
</IfModule>

启用模块后,Tomcat 应该会看到正确REMOTE_ADDR的标头以及HTTP_X_FORWARDED_FOR标头。

于 2012-09-06T11:10:57.510 回答