当服务器位于 AWS ELB 之后时,ASP.NET Core MVC 应用程序如何获取客户端 IP 地址?

Posted

技术标签:

【中文标题】当服务器位于 AWS ELB 之后时,ASP.NET Core MVC 应用程序如何获取客户端 IP 地址?【英文标题】:How can an ASP.NET Core MVC app get client IP address when server is behind AWS ELB? 【发布时间】:2019-09-21 13:06:39 【问题描述】:

我在包含 ELB 的 Elastic Beanstalk 环境中的 AWS 上运行 ASP.NET Core MVC 应用程序。

我用这段代码来获取客户端的IP地址:

HttpContext.Connection.RemoteIpAddress.ToString()

但是,这会返回负载平衡器的 IP 地址,而不是客户端的 IP 地址。我相信RemoteIPAddress会返回X-Forwarded-For HTTP头中存储的地址,理论上应该是客户端IP,其实不是。

所以我按照说明为基于these instructions 的 ELB 启用代理协议。

但仍然没有运气。 RemoteIPAddress 仍然返回相同的 ELB IP 而不是客户端 IP。

在 ELB 后面的 AWS 上运行 ASP.NET Core MVC 应用程序时,是否有人能够获取客户端 IP?如果是这样,怎么做?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您可以只查看原始 IP 地址的 X-Forwarded-For 标头。

要访问标头,请查看 HttpContext.Current.Request.HeadersHttpContext.Request.Headers

使用该方法在 ELB 后面的 AWS 上运行 ASP.NET Core MVC 应用程序时,我成功列出了原始客户端 IP。

【讨论】:

这成功了!为了帮助可能遇到同样问题的其他人,这是我使用的有效代码:HttpContext.Request.Headers["X-Forwarded-For"].ToString()

以上是关于当服务器位于 AWS ELB 之后时,ASP.NET Core MVC 应用程序如何获取客户端 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章

AWS ELB - 多 VPC 负载均衡

Wix + GoDaddy 域 + 子域的 AWS ELB

上瘾云计算,从负载均衡ELB开始

具有生产和故障转移功能的 AWS ELB 应用程序负载均衡器

AWS/ALB、http/2 和 GOAWAY

AWS ELB 简介