java - Apache 代理隐藏了 HttpServletRequest 对象的远程 IP 地址

标签 java apache proxy ip

我正在用 Java 编写一个应用程序,该应用程序为网页提供来自底层数据库的数据。我根据一些 IP 限制限制对网页的访问。基本上,任何落入“已接受”范围内的 IP 都将被允许访问该网页,而该范围之外的任何 IP 都将被重定向到错误页面。要获取尝试访问该页面的用户的 IP 地址,我使用以下命令:

String userIPAddress = request.getRemoteAddr();

“请求”是我的 HttpServletRequest 对象。

我遇到的问题是此网页是通过 Apache Web 服务器代理的。

发生这种情况时,它会丢失客户端 IP 地址并采用我们防火墙的 IP 地址。因此,当我访问 request.getRemoteAddr() 时,无论客户尝试从何处访问网页,它都会返回相同的 IP。

当通过直接 IP 地址在内部访问网页时,我的 IP 检查工作正常。当您通过代理访问时,问题就出现了。

是否可以通过编程方式访问客户端的实际 IP 地址?或者这是必须通过 Apache Web 服务器完成/更改以允许此信息通过的事情吗?在那种情况下,如果那是一个更好的论坛,我可以发帖到 Server Fault。

非常感谢您的帮助。

最好的问候。

最佳答案

当以反向代理模式运行时(例如使用 ProxyPass 指令),Apache mod_proxy_http添加几个请求 header 以便将信息传递给源服务器,其中之一是 X-Forwarded-For,它将包含客户端的 IP 地址。

请记住,如果原始请求已经包含此 header (这一点并不罕见),Apache 会将客户端 IP 地址附加到现有值,因此您将获得以逗号+空格分隔的 IP 地址列表.最后(最右边)的 IP 地址始终是连接到最后一个代理(您的 Apache)的 IP 地址,这意味着这是您要测试的代理。

关于java - Apache 代理隐藏了 HttpServletRequest 对象的远程 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40386578/

相关文章:

java - Spring JPA Repository n+1 问题,EBEAN 替代方案

java - Eclipse + WindowBuilder,swing 运行时调整大小和定位

java - Spring Boot 3 JPA 规范未使用 jakarta 进行过滤

spring - 当被 Spring 代理类访问时,Kotlin 实例变量为空

post - 如何使用 browsermob-proxy 和 selenium 捕获 http POST 请求

java - 可嵌套数据集的字符串压缩与解压

apache - 禁用特定图像文件的 mod_pagespeed 压缩

PHP/Apache sh 错误权限在每个请求上都被拒绝

java - Mailchimp Apache 错误

wordpress - 使用node-http-proxy时隐藏WordPress URL中的端口号