Azure 应用服务中的远程 IP 通过 HTTPS 为自定义域提供服务
Remote IP in Azure App Service served over HTTPS for a custom domain
我的目标是拥有一个 Azure 应用服务,通过 HTTPS 从自定义域提供服务。
此应用接收 HTTPS POST 请求,并应在进程中记录远程 IP。
我通常获取远程IP地址,调用客户端的IP,像这样:
HttpRequest request = ...
var IP = request.HttpContext.Connection.RemoteIpAddress;
为了让应用程序通过 HTTPS 为自定义域提供服务,我启用了 azure CDN 端点。
现在我记录的IP是给CDN服务器的,不是调用客户端的。
是否可以获取原始IP?
有问题的请求是 HTTPS POST,因此 CDN 缓存应该不是问题。
Azure CDN 是否添加了任何可能包含此类信息的headers?
直接向应用服务添加 SSL 证书是否有任何改变?
This article描述了Azure CDN的工作原理,我们可以知道用户通过CDN请求文件,如果POP中的边缘服务器缓存中没有文件,边缘服务器请求文件从起源。用户请求不会直接从客户端用户发送到源,因此如您所见,它记录的是边缘服务器的 IP,而不是调用客户端的 IP。
通过测试我发现 Azure CDN 添加了 X-Forwarded-For
header 和客户端的真实 IP。
我发现唯一提到这个 header 的是在 Azure CDN documentation 中提到 header 是保留的。
我的目标是拥有一个 Azure 应用服务,通过 HTTPS 从自定义域提供服务。 此应用接收 HTTPS POST 请求,并应在进程中记录远程 IP。
我通常获取远程IP地址,调用客户端的IP,像这样:
HttpRequest request = ...
var IP = request.HttpContext.Connection.RemoteIpAddress;
为了让应用程序通过 HTTPS 为自定义域提供服务,我启用了 azure CDN 端点。
现在我记录的IP是给CDN服务器的,不是调用客户端的。
是否可以获取原始IP?
有问题的请求是 HTTPS POST,因此 CDN 缓存应该不是问题。
Azure CDN 是否添加了任何可能包含此类信息的headers?
直接向应用服务添加 SSL 证书是否有任何改变?
This article描述了Azure CDN的工作原理,我们可以知道用户通过CDN请求文件,如果POP中的边缘服务器缓存中没有文件,边缘服务器请求文件从起源。用户请求不会直接从客户端用户发送到源,因此如您所见,它记录的是边缘服务器的 IP,而不是调用客户端的 IP。
通过测试我发现 Azure CDN 添加了 X-Forwarded-For
header 和客户端的真实 IP。
我发现唯一提到这个 header 的是在 Azure CDN documentation 中提到 header 是保留的。