问题标签 [x-forwarded-for]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
20385 浏览

docker - 如何将 nginx X-Forwarded-Port 配置为原始请求端口

我在标准反向代理场景中使用 nginx,将所有请求传递/auth到另一台主机,但是我正在尝试使用非标准端口。

我的最终目标是将X-Forwarded-Port标头设置为请求进入的端口。

这是我在 nginx.conf 中的位置块:

这个 nginx 运行在一个 docker 容器中,该容器被配置为将请求从 8085 转发到容器中的 80,这样 nginx 进程正在监听 80:

0.0.0.0:8085->80/tcp

当我点击网址时:

http://localhost:8085/auth/

我被正确重定向到http://otherhost:8090,但X-Forwarded-Port标题丢失或错误。

<VAR>原始块中,我尝试了以下方法:

  • $server_port- 这是 nginx 正在监听的端口(80),而不是请求端口。

  • $pass_port- 在我的设置中似乎为空,所以 nginx 删除了标题。

  • $http_port- 这是每个请求的随机端口。

  • $remote_port- 这是每个请求的随机端口。

可以在部署时更改我的配置以硬编码到传入请求的已知端口,但理想情况下,我可以在不更改 nginx 配置的情况下更改前端端口。

我已经搜索了 nginx 变量列表,但找不到类似$request_port. 有什么方法可以实现我的意图吗?

0 投票
0 回答
55 浏览

nginx - 当我使用 ddos​​ 防御服务器作为前端时,Nginx 拒绝 ip 不起作用

我想在 nginx 配置中添加块 IP 地址。但是仍然可以使用 curl 访问它!

blockip.conf

这里有两种情况。

1.直接使用域名(A记录)指向服务器,blockip可以正常工作。

2.添加ddos防御服务器时,nginx拒绝规则不再起作用!

但我可以从 nginx-access-log 中获取真实 IP。这里记录示例:

解决方案

顺便说一下。我把nginx改成openresty

0 投票
1 回答
1102 浏览

tomcat - Tomcat:“X-Forwarded-For”不适用于负载均衡器

我们目前正在使用 Tomcat 7 update 76 进行冗余服务器设置(2 个服务器 + 1 个负载均衡器)。为了满足我们公司的日志记录要求,我们正在尝试获取实际发送请求的远程服务器的 IP,不是负载均衡器的 IP。不幸的是,我们无法让它与以下文档一起使用:

我们使用以下配置进行访问日志记录和远程阀门:

设置了请求标头“X-Forwarded-For”,并通过wireshark分析了负载均衡器。但是,我们仍然只能获得负载均衡器的 IP,而不是远程客户端的 IP。已检查配置的 IP 地址并且它们是正确的。

0 投票
1 回答
692 浏览

apache - Apache httpd (mod_proxy) 似乎丢弃/忽略 X-Forwarded-For 链中的第三个 IP 地址?

考虑场景/流程:

remote user (client) > proxy1 > proxy2 > AWS ALB > httpd/reverse_proxy > my_application

当用户的请求穿过他们的网络时,X-Forwarded-For (XFF) 标头会附加每个后续代理的 IP 地址。例如,当它到达 ALB 时,XFF 标头包含“192.168.1.100, 100.99.98.97”。然后 ALB 会将 ClientIP 附加到此标头,在本例中是 proxy2 的 IP。最后,当请求到达我的应用程序前面的反向代理时,XFF 标头现在是:“192.168.1.100, 100.99.98.97, 95.94.93.92”。

我看到的问题: 在 reverse_proxy ,httpd 似乎忽略或丢弃了 X-Forwarded-For 标头链中的最后一个/最正确的 IP,特别是当地址超过 2 个时。

  • 反向代理的 tcpdump 显示标头包含完整链,因此 AWS ALB 正在做它应该做的并附加 proxy2 的地址。
  • 在 httpd 访问日志中打印 XFF 标头时,我只看到打印的链中的前 2 个地址。
  • 更重要的是,当试图对预期的第三个地址采取行动时,这个测试失败了,进一步证明(我认为),第三个地址被丢弃了。“采取行动”是指在 vhost 中设置后尝试调用Require指令 (mod_authz_host) 。RemoteIPHeader X-Forwarded-For
  • 如果我proxy1从流程中删除,那么我proxy2会在反向代理的 XFF 标头中看到地址,而不会出现问题。

我不确定我在配置或测试中遗漏了什么,虽然不是标准的,但 XFF 标头中的多个地址很常见。我只在 Apache httpd 2.4 中遇到这个问题。在 2.2 版中,这不是问题,我可以重复相同的设置/流程,我看到链中的所有 3 个地址。提前致谢。

虚拟主机示例:

0 投票
0 回答
1301 浏览

proxy - 如何设置squid代理服务器以获取客户端真实IP地址

我的客户 http 请求通过 Squid 代理服务器连接到后端 apache Web 服务器。后端网络服务器中的 php 脚本获取客户端的真实 IP 地址,如下所示:

我使用以下参数设置 Squid 代理服务器以获得客户端的真实 ip:

我希望通过参数 $_SERVER['HTTP_X_FORWARDED_FOR'] 获得真实客户的 ips。但是,当我检查客户端浏览器的值时,只有 remote_addr 具有值:

  • http_client_ip:未定义
  • http_x_forwarded_for:未定义
  • remote_addr => squid 代理服务器 ip 地址

我怀疑问题可能出在我的 squid 代理服务器设置中,但不知道应该更改哪些 Squid 配置参数。提前感谢您的帮助。

带着敬意

史蒂夫

0 投票
1 回答
7381 浏览

django - 在 nginx 中设置“X-Forwarded-For”标头的目的是什么

我的 Django 应用程序有以下 Nginx 配置:

我将此配置基于此处的教程。经过一番研究,似乎设置Host标头允许 Django API 确定原始客户端的 IP 地址(而不是代理的 IP 地址)。

X-Forwarded-For标题的意义何在?我在 nginx 日志中看到一个名为的字段$http_x_forwarded_for,但我不确定它是否相关。

0 投票
1 回答
165 浏览

amazon-web-services - AWS Api Gateway Lambda 代理集成,如何从客户端请求中获取源端口

我正在使用 AWS Api Gateway 在代理模式下调用我的 Lambda 函数。事件对象包含 X-Forwarded-Port 信息,但它包含客户端请求的目标端口,而我需要源端口(即远程端口)。我不知道如何得到它。

提前致谢

0 投票
2 回答
517 浏览

logging - 如何使用日志解析器工作室为 X-Forwarded-For 字段选择源 IP?

我正在尝试编写一个获取 X-Forwarded-For 字段的第一个值的查询。由于负载均衡器,该字段中有多个 IP。有什么方法可以获取第一个值,即原始 IP?我已经查看了这方面的信息,但没有找到任何信息。

我正在使用 Log Parser Studio,但也可以选择使用命令行版本。这就是我所拥有的:

select X-Forwarded-For, count(X-Forwarded-For) as requestcount from '[LOGFILEPATH]' where cs-uri-stem like '%/%' group by X-Forwarded-For order by count(X-Forwarded-For) desc

0 投票
1 回答
117 浏览

tomcat8 - 需要获取正在访问 Web 应用程序的远程 ip

我正在尝试在 tomcat 日志中记录网站访问者应用程序我尝试在 server.xml 中添加以下代码行

我在 tomcat 日志中得到以下输出。

  • 192.168.1.149 15 - - [24/Jul/2020:16:24:16 +0200] “GET /geonetwork/srv/eng/shib.user.login.noforward HTTP/1.0”200 50

我需要获取正在访问该应用程序的人的远程 IP

0 投票
1 回答
460 浏览

spring-boot - 远程地址是否与 x-forwarded-for 相同?

我需要从请求中获取x-forwarded-for标头。由于我已经有一个 http 过滤器,我可以使用轻松记录远程地址HttpServletRequest.getRemoteAddr(),而记录x-forwarded-for则需要额外的配置。我的问题是,HttpServletRequest.getRemoteAddr()返回的地址是否与x-forwarded-for相同,x-forwarded-for远程地址是否相同?