目前,我正在运行一个在 Tomcat 上运行的网站,该网站前面有 Apache,并使用 Varnish 进行缓存。 Tomcat 正在端口 8080
上运行和端口 81
用作 Varnish 后端。我需要实现一个功能,我需要知道访问该网站的客户端机器的 IP 地址。我尝试通过标题 X-FORWARDED-FOR
访问 IP 地址.
当从端口 81(即 http://mywebsite.com:81/)访问网站时,我可以获得客户端机器的 IP 地址,但不幸的是,当通过默认端口 80(即 http://mywebsite.com/)访问时,它返回的是本地主机 IP 地址(127.0.0.1)。任何人都可以建议如何从端口 80 获取用户的真实 IP 地址吗?
最佳答案
如果我理解正确,您的设置如下:
Varnish(端口 80)-> Apache(端口 81)-> Tomcat(端口 8080)
并且您希望实际的远程 IP 显示为 REMOTE_ADDR
在 Tomcat 服务器上。
Varnish 附加 X-Forwarded-For
默认情况下 header ,因此已经排序。要让 Apache 将实际的远程 IP 传递给 Tomcat,您应该安装 reverse proxy add forward module for 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
标题。
关于apache - 当网站在 Tomcat 前使用 Apache Varnish 配置时获取用户机器的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12292189/