问题标签 [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.
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://otherhost:8090
,但X-Forwarded-Port
标题丢失或错误。
在<VAR>
原始块中,我尝试了以下方法:
$server_port
- 这是 nginx 正在监听的端口(80),而不是请求端口。$pass_port
- 在我的设置中似乎为空,所以 nginx 删除了标题。$http_port
- 这是每个请求的随机端口。$remote_port
- 这是每个请求的随机端口。
我可以在部署时更改我的配置以硬编码到传入请求的已知端口,但理想情况下,我可以在不更改 nginx 配置的情况下更改前端端口。
我已经搜索了 nginx 变量列表,但找不到类似$request_port
. 有什么方法可以实现我的意图吗?
nginx - 当我使用 ddos 防御服务器作为前端时,Nginx 拒绝 ip 不起作用
我想在 nginx 配置中添加块 IP 地址。但是仍然可以使用 curl 访问它!
blockip.conf
这里有两种情况。
1.直接使用域名(A记录)指向服务器,blockip可以正常工作。
2.添加ddos防御服务器时,nginx拒绝规则不再起作用!
但我可以从 nginx-access-log 中获取真实 IP。这里记录示例:
解决方案
顺便说一下。我把nginx改成openresty
tomcat - Tomcat:“X-Forwarded-For”不适用于负载均衡器
我们目前正在使用 Tomcat 7 update 76 进行冗余服务器设置(2 个服务器 + 1 个负载均衡器)。为了满足我们公司的日志记录要求,我们正在尝试获取实际发送请求的远程服务器的 IP,不是负载均衡器的 IP。不幸的是,我们无法让它与以下文档一起使用:
- https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html
- https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/AccessLogValve.html
- https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Remote_IP_Valve
我们使用以下配置进行访问日志记录和远程阀门:
设置了请求标头“X-Forwarded-For”,并通过wireshark分析了负载均衡器。但是,我们仍然只能获得负载均衡器的 IP,而不是远程客户端的 IP。已检查配置的 IP 地址并且它们是正确的。
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 个地址。提前致谢。
虚拟主机示例:
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 配置参数。提前感谢您的帮助。
带着敬意
史蒂夫
django - 在 nginx 中设置“X-Forwarded-For”标头的目的是什么
我的 Django 应用程序有以下 Nginx 配置:
我将此配置基于此处的教程。经过一番研究,似乎设置Host
标头允许 Django API 确定原始客户端的 IP 地址(而不是代理的 IP 地址)。
X-Forwarded-For
标题的意义何在?我在 nginx 日志中看到一个名为的字段$http_x_forwarded_for
,但我不确定它是否相关。
amazon-web-services - AWS Api Gateway Lambda 代理集成,如何从客户端请求中获取源端口
我正在使用 AWS Api Gateway 在代理模式下调用我的 Lambda 函数。事件对象包含 X-Forwarded-Port 信息,但它包含客户端请求的目标端口,而我需要源端口(即远程端口)。我不知道如何得到它。
提前致谢
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
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
spring-boot - 远程地址是否与 x-forwarded-for 相同?
我需要从请求中获取x-forwarded-for标头。由于我已经有一个 http 过滤器,我可以使用轻松记录远程地址HttpServletRequest.getRemoteAddr()
,而记录x-forwarded-for则需要额外的配置。我的问题是,HttpServletRequest.getRemoteAddr()
返回的地址是否与x-forwarded-for相同,x-forwarded-for和远程地址是否相同?