apache - 当网站在 Tomcat 前使用 Apache Varnish 配置时获取用户机器的 IP 地址

标签 apache jakarta-ee tomcat6 varnish

目前,我正在运行一个在 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/

相关文章:

java - net::ERR_CONNECTION_RESET 与 Tomcat 6

java - Tomcat 和 Web 服务

python - Flask中的路径路由

regex - .htaccess 如果在最后一个尾部斜线之前没有扩展名,则添加尾部斜线

linux - Apache 无法启动 "could not bind to address [::]:443"虽然没有进程正在使用它,但 netcat 可以打开它

Java:用户评论使用哪种标记语言

java - 是否可以传递 HttpServletrequest 属性来公开从 Controller 调用的方法

apache - htaccess 重写为需要 www、https 和 ip

java - 服务器启动时在 Web 应用程序中获取服务器端口

Java 小程序加载时间过长