【问题标题】:How do I get the request IP address on a SSL request如何获取 SSL 请求的请求 IP 地址
【发布时间】:2011-09-01 06:00:12
【问题描述】:

我有一项在 Amazon Ec2 中运行的服务。该服务公开了一个 http 端点和一个 https 端点。记录数据时,我正在对用户 IP 地址进行一些地理查找。在进入 http 端点的请求上一切正常。我必须抓住 X-Forwarded-For 标头,这样我就不会使用 Amazon 负载均衡器的 UP 地址,并且我总是能够得到我需要的东西。但是,对于来自 https 端点的请求,所有 IP 地址都是相同的。

为了提取 IP 地址,我使用以下 C# 代码:

    public static string FetchClientIp(HttpRequest req)
    {
        var value = req.Headers["X-Forwarded-For"];
        return string.IsNullOrEmpty(value) ? req.UserHostAddress : value;
    }

我找不到其他我需要做的特定于 https 请求的事情,所以我希望这里有人之前遇到过这个问题。我将对此进行测试,以更好地隔离问题。

谢谢

【问题讨论】:

  • 这显然是亚马逊流量管理器的问题,而且它非常深奥,所以我不知道你在这里会有多少运气。建议您咨询供应商论坛或支持。
  • 疯狂的建议:你确定与你连接的端点的IP不是客户端IP地址吗?

标签: c# ssl amazon-ec2


【解决方案1】:

这取决于您如何设置 ELB。

如果您在 ELB (new feature as of October 2010) 上终止 SSL,则客户端 IP 地址将位于“X-Forwarded-For”中。

HttpContext.Current.Request.Headers["X-Forwarded-For"]

听起来您正在终止 Web 服务器上的 SSL,然后 ELB 无法解密流量并将“X-Forwarded-For”标头添加到 HTTP 请求。因此,标头“REMOTE_ADDR”(即 HttpRequest.UserHostAddress 返回的标头)中的客户端 IP 地址是最后一跳的 IP——在本例中是 ELB 的内部 IP 地址。

请记住,“X-Forwared-For”可能包含多个 IP 地址,如 http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/index.html?SvcIntro.html#X-Forwarded-For 所述。在这种情况下,您可能对列出的第一个地址最感兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2011-07-31
    • 2017-05-23
    • 1970-01-01
    • 2019-02-01
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多