问题标签 [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 投票
1 回答
93 浏览

asp.net - 如何在 3 层架构中获取客户端 IP?

我目前正在研究具有以下架构的模块:

当客户端发出请求时,它会被转发到前面有 ELB 的节点服务器。节点服务器通过不同的调用从托管在另一台服务器中的后端 .NET 代码中获取数据。

考虑到这种架构,是否可以在用 .NET 编写的后端代码中访问客户端 IP?

0 投票
0 回答
480 浏览

nginx - nginx proxy_set_header X-Forwarded-For 允许/拒绝出现问题

Nginx 的配置:

如果我请求没有标头的http://192.168.1.101:8000,nginx返回 403。

如果我使用 set请求http://192.168.1.101:8000header[" X-Forwarded-For "] = 127.0.0.1,nginx 返回 200。

那么如何拒绝非法IP的请求呢?</p>

0 投票
1 回答
1329 浏览

reverse-proxy - Lighttpd 根据传入请求设置 X-Forwarded-Host

我目前使用 Lighttpd 作为代理向不支持 HTTPS 的应用程序添加 HTTPS 加密。

为此,我使用以下配置:

除了一件事之外,此配置有效。我必须硬编码X-Forwarded-Host的值。直到最近这还不是问题,但现在我有多个域指向同一个代理,需要转发正确的域名。

有没有办法从传入的 HTTPS 连接中提取到主机以将正确的值提供给X-Forwarded-Host

0 投票
0 回答
724 浏览

varnish - 为什么 X-Forwarded-For 在 varnish 内部发生了变化?

我在后端服务器之上和 SSL 终结器下运行清漆服务器。SSL 终止符返回一个X-Forwarded-For标头,其中包含请求实际来自的真实 IP 地址,但由于某种奇怪的原因,X-Forwarded-For它被更改为清漆缓存服务器的 IP 地址。如下所示:

我想捕获实际客户端的 IP 地址并将其发送到日志。我应该怎么办?

0 投票
1 回答
1539 浏览

apache - 什么决定了 mod_proxy 何时仅将内部 IP 地址添加到 X-Forwarded-For 标头

我一直在尝试使用 Apache mod_proxy 和 mod_remoteip,以确认我对 X-Forwarded-For 标头的处理的理解,特别是关于如何处理内部 IP 地址(例如 10.xxx 或 192.168.xx 范围)。

似乎 mod_proxy 并不总是将内部 IP 地址添加到 X-Forwarded-For 标头,但我一直无法找到任何解释此预期行为的文档。

据我所知,当请求从内部 IP 地址发起时,mod_proxy 会将内部 IP 地址添加到 X-Forwarded-For 标头中,但是当初始请求来自公共 IP 时,mod_proxy 似乎没有添加X-Forwarded-For 的任何内部 IP 地址。

问题

我的问题是:管理 mod_proxy 是否将调用 IP 地址附加到 X-Forwarded-For 标头的规则是什么。

mod_proxy 上的文档说:

在反向代理模式下(例如,使用 ProxyPass 指令),mod_proxy_http 添加几个请求标头以便将信息传递给源服务器。这些标题是:

X-Forwarded-For - 客户端的 IP 地址。

X-Forwarded-Host - 客户端在 Host HTTP 请求标头中请求的原始主机。

X-Forwarded-Server - 代理服务器的主机名。

在源服务器上使用这些标头时要小心,因为如果原始请求已经包含这些标头之一,它们将包含多个(逗号分隔)值。例如,您可以在源服务器的日志格式字符串中使用 %{X-Forwarded-For}i 来记录原始客户端 IP 地址,但如果请求经过多个代理,您可能会获得多个地址。

我读到这个是说客户端 IP 地址将始终附加到 X-Forwarded-For 标头,但这不是我观察到的行为。

这个问题的其余部分是我进行的测试和我观察到的行为。

设置

我已经设置了两台运行 Apache 并安装了 mod_proxy 的服务器。我将它们称为一和二。

  • 一个具有(内部)IP 地址 10.0.7.1
  • 两个具有(内部)IP 地址 10.0.7.2

One 具有以下 ProxyPass 指令,以便对 /proxyToTwo 的子路径的请求发送到 /proxyToOne 下的等效子路径 on Two

Two 具有以下 ProxyPass 指令,因此对 /proxyToOne 的子路径的请求被发送回 One 但没有 /proxyToOne 前缀

这样做的效果是,当我向http://One/proxyToTwo/foo它发出请求时,代理如下

  1. 一收到请求,向二发出以下请求http://10.0.7.2/proxyToOne/foo
  2. 二收到请求,将以下请求发回给一http://10.0.7.1/foo
  3. 接收请求/foo并实际为资源提供服务

因此,每个请求都会从一跳到二,然后再退回到一,然后再响应两次。

使用内部 IP 调用

使用上面的设置,我使用它的内部 IP 地址从两个呼叫一个:

当 One 最终获得/foo资源请求时收到的 X-Forwarded-For 和 X-Forwarded-Host 标头是我期望的如下:

这就是我所期望的,请求首先通过一个代理,然后是两个,并且请求的 IP 地址首先是来自两个(curl)的初始请求,然后是来自一个(mod_proxy)的请求和最终请求(不在标头中,因为它是来自两个(mod_proxy)的连接的客户端 IP

使用外部 IP 调用

出乎意料的行为是 mod_proxy 在从公共 IP 调用时似乎表现不同。因此,我没有从两个呼叫一个,而是使用公共地址从本地计算机呼叫一个

X-Forwarded-Host 仍然是我所期望的:

也就是说,请求首先通过 One 代理(使用它的外部地址),然后通过 Two 代理。

但 X-Forwarded-For 标头仅显示我的(外部)IP 地址:

这向我表明 mod_proxy 的初始执行是添加带有客户端 IP 地址的 X-Forwarded-For 标头。但是随后由 Two 进行的代理不会附加 One 的地址。

我认为这种行为可能比盲目地将内部 IP 地址附加到标头更有用,但我无法在任何地方找到它的文档,所以想确保我完全理解它。

0 投票
1 回答
4762 浏览

node.js - NGINX 没有正确设置 X-Forwarded-For

我有一台 NGINX 服务器充当其他几台服务器的负载平衡器。因为我需要访问用户的 IP 地址,所以我在我的 nginx 配置中添加了以下几行:

然后,在后端服务器中,我只需使用 X-Forwarded-For 标头中的第一个 IP 地址。但是,每隔几分钟(每 ~2K 请求一次),我会得到unknown, xxx.xxx.xxx.xxx一个标头的值,其中xxx.xxx.xxx.xxx是一个 IP 地址(每次都不同)。这个问题的根源可能是什么?

0 投票
1 回答
872 浏览

php - Symfony2 在 AWS 负载均衡器/2 个 IP 地址上使用了错误的“x-forwarded-for”

简单/小问题。

我的 Amazon AWS ELB 向我发送了以下标头。

但是请求使用的是第二种,本地机器ip地址。- 172.31.17.157

有谁知道如何解决这个问题?是否可以覆盖 Symfony 的 Get IP 功能?

提前致谢!

//编辑 1 - HTTPs 配置

0 投票
1 回答
947 浏览

java - 带 CDN 的 Tomcat RemoteIpValve 配置

我在 IIS 8 后面配置了 Tomcat 8。我还启用了 CDN 服务。

主机已启用 RemoteIpValve

日志显示为

访问日志配置

并在访问日志中

现在,tomcat 没有选择实际的客户端 IP 121.243.37.18,而是选择了 CDN 服务器 IP。我不能添加 CDN 服务器 IP 作为代理,因为会有很多 CDN 边缘服务器。如何配置tomcat以获取正确的远程IP地址

0 投票
0 回答
696 浏览

apache - What is the rationale behind apache's two remoteip directives; RemoteIPTrustedProxy vs remoteipinternalproxy

RemoteIPTrustedProxy does not accept internal addresses like 10.0.0.0/8.

remoteipinternalproxy accepts all addresses.

When should you use one or the other. The rationale is, as far as I can tell, not retrievable from Apache httpd's documentation.

0 投票
1 回答
893 浏览

apache - How do I get X-Forwarded-For in Apache with mod_proxy enables

I have configured reverse proxy with mod_proxy.

ProxyPreserveHost is On ProxyPass and ProxyPassReverse are set.

However I need remote address of client in X-Forwarded-For header but it is not visible.

Tried almost all thread! Please help!