客户端的 Amazon cloudfront IP 解析

Amazon cloudfront IP resolution by client

我有一个 Web 应用程序,它使用大量通过 CloudFront 缓存的图像。一些用户抱怨加载时间非常慢,所以我想在站点上构建一个诊断页面,通过加载一些图像并报告时间来进行速度测试。我还想报告用户的 IP 地址(当他们加载页面时我可以很容易地从 php 获得),但我还想显示他们为云端服务器获取的 IP 地址。

我知道如果我运行:

dig subdomain.cloudfront.net

我得到了几个 IP 地址。如果一个应用程序(浏览器、QT 应用程序、移动应用程序)正在运行与 subdomain.cloudfront.net 的同时连接,它是否总是首先使用第一个 IP,只有在失败时才使用其他 IP?

有没有什么方法可以从浏览器中获取这些来自客户端用户系统的 IP 地址?据我了解,他们将根据他们的 IP 地址获得不同的 IP 列表。

如果这在浏览器中是不可能的,我可以向云端服务器发送任何类型的请求,在响应中包含它的 IP 地址吗?

does it always use the first IP first

大多数现代 DNS 解析器和权威服务器会随机排列 IP 地址的顺序——更准确地说,是给定域名的 A 记录集。

所以,"first IP" 确实根本不是确定性的。

and use the others only if it fails?

显然这很browser-dependent。 Most modern browsers do handle it 通过重试其他 IP。不过我不会指望它。

is there any way from within the browser that I can get these IP addresses as they are from the client users system?

从 Chrome devtools 网络面板,您可以在请求的 "Remote Address" 字段中看到浏览器连接到的地址。但是,我不知道有什么方法可以从页面上的 Javascript 访问它。

It's my understanding that they will get a different list of IPs based on their IP address.

是的。

is there any type of request that I could send to the cloudfront server that would include it's IP address in the response?

据我所知没有。但是,您也许能够对 ViaX-Amz-Cf-Id 响应进行逆向工程 header?粗略一看,经过hex或base64解码后,我都看不懂

也就是说,您可以使用一个技巧,即您可以在您的分发中设置一个 URL 前缀,将请求转发到您的服务器 运行 PHP.然后,您将用户指向一个 URL,这将导致一个请求被转发到您的 PHP 脚本。在您的 PHP 脚本中,检查 X-Forwarded-For header,其中应包含 Cloudfront IP。