C# 如何在SSL请求中获取请求IP地址
我有一个在AmazonEC2中运行的服务。该服务同时公开http端点和https端点。当我记录数据时,我正在对用户IP地址进行地理查找。对于进入http端点的请求,一切都正常工作。我必须抓取X-Forwarded-For报头,这样我就不会占用Amazon负载平衡器的地址,而且我总是能够得到我需要的东西。但是,对于https端点上的请求,所有IP地址都是相同的 为了提取IP地址,我使用以下C代码:C# 如何在SSL请求中获取请求IP地址,c#,ssl,amazon-ec2,C#,Ssl,Amazon Ec2,我有一个在AmazonEC2中运行的服务。该服务同时公开http端点和https端点。当我记录数据时,我正在对用户IP地址进行地理查找。对于进入http端点的请求,一切都正常工作。我必须抓取X-Forwarded-For报头,这样我就不会占用Amazon负载平衡器的地址,而且我总是能够得到我需要的东西。但是,对于https端点上的请求,所有IP地址都是相同的 为了提取IP地址,我使用以下C代码: public static string FetchClientIp(HttpRequest
public static string FetchClientIp(HttpRequest req)
{
var value = req.Headers["X-Forwarded-For"];
return string.IsNullOrEmpty(value) ? req.UserHostAddress : value;
}
我找不到任何其他我需要做的特定于https请求的事情,所以我希望这里的人以前遇到过这种情况。我将对此进行测试,以更好地隔离问题
谢谢这取决于您如何设置ELB 如果要在ELB上终止SSL,则客户端IP地址将为X-Forwarded-For
HttpContext.Current.Request.Headers["X-Forwarded-For"]
听起来像是在web服务器上终止SSL,然后ELB无法解密流量并将X-Forwarded-For头添加到HTTP请求中。因此,头REMOTE_ADDR中的客户端IP地址是HttpRequest.UserHostAddress返回的头,它是最后一个跃点的IP—在本例中是ELB的内部IP地址
请记住,X-Forwared-For可能包含多个IP地址,如中所述。在这种情况下,您可能对列出的第一个地址最感兴趣。很明显,问题出在亚马逊流量管理器上,而且它非常神秘,所以我不知道您在这里会有多幸运。建议您咨询供应商论坛或支持。疯狂建议:您确定与您连接的端点的IP不是客户端IP地址吗?