【问题标题】:Azure App Service with ARR Reading Client IP from Web API带有 ARR 的 Azure 应用服务从 Web API 读取客户端 IP
【发布时间】:2020-02-13 23:30:47
【问题描述】:

我有一个托管在 Azure 应用服务中的 ASP.Net Web API 应用程序,该应用程序使用其自动缩放/ARR 进行了横向扩展。要读取客户端的 IP,我需要查看 X-FORWARDED-FOR 还是可以像没有负载均衡器一样读取它,例如:https://stackoverflow.com/a/22532924

似乎找不到有关其工作原理的文档。

【问题讨论】:

标签: azure azure-web-app-service


【解决方案1】:

我可以给你我的测试结果。

我创建了一个 Web 应用并手动将其设置为 2 个实例。

我的代码:

public string GetIP()
{
    string HTTP_X_FORWARDED_FOR = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
    string REMOTE_ADDR = Request.ServerVariables["REMOTE_ADDR"];
    string UserHostAddress = Request.UserHostAddress;
    string WEBSITE_INSTANCE_ID = Environment.GetEnvironmentVariable("WEBSITE_INSTANCE_ID");
    return Newtonsoft.Json.JsonConvert.SerializeObject(new { HTTP_X_FORWARDED_FOR = HTTP_X_FORWARDED_FOR, REMOTE_ADDR = REMOTE_ADDR, UserHostAddress = UserHostAddress, WEBSITE_INSTANCE_ID = WEBSITE_INSTANCE_ID });
}

结果:

// First request from 13.70.19.163
{"HTTP_X_FORWARDED_FOR":"13.70.19.163:50331","REMOTE_ADDR":"13.70.19.163","UserHostAddress":"13.70.19.163","WEBSITE_INSTANCE_ID":"2b4ef85523c8628779b336b1ae7771fb0c5e289014ef47912d911dceb47ba032"}

// Second request from 65.52.178.194
{"HTTP_X_FORWARDED_FOR":"65.52.178.194:31190","REMOTE_ADDR":"65.52.178.194","UserHostAddress":"65.52.178.194","WEBSITE_INSTANCE_ID":"2b4ef85523c8628779b336b1ae7771fb0c5e289014ef47912d911dceb47ba032"}

// Another request from 223.67.26.144. This request is redirected to a different instance
{"HTTP_X_FORWARDED_FOR":"223.67.26.144:2732","REMOTE_ADDR":"223.67.26.144","UserHostAddress":"223.67.26.144","WEBSITE_INSTANCE_ID":"76deb6ae830639a9e41a93b4cc30ee9961483023510e33e97582dc1e2ac11a99"}

结论:

Request.ServerVariables["HTTP_X_FORWARDED_FOR"]REMOTE_ADDRUserHostAddress 都可以获得正确的客户端 IP。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2013-07-03
    • 2014-09-04
    相关资源
    最近更新 更多