使用ARR从Web API读取客户端IP的Azure应用程序服务
我有一个ASP.Net Web API应用程序,托管在Azure的应用程序服务中,使用其自动缩放/ARR进行缩放。要读取客户端的IP,我需要查看使用ARR从Web API读取客户端IP的Azure应用程序服务,azure,azure-web-app-service,Azure,Azure Web App Service,我有一个ASP.Net Web API应用程序,托管在Azure的应用程序服务中,使用其自动缩放/ARR进行缩放。要读取客户端的IP,我需要查看X-FORWARDED-FOR,还是可以像没有负载平衡器一样读取,如下所示: 似乎找不到关于它如何工作的文档。我可以给你我的测试结果 我创建了一个web应用程序,并手动将其设置为2个实例 我的代码: public string GetIP() { string HTTP_X_FORWARDED_FOR = Request.ServerVariab
X-FORWARDED-FOR
,还是可以像没有负载平衡器一样读取,如下所示:
似乎找不到关于它如何工作的文档。我可以给你我的测试结果 我创建了一个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\u X\u FORWARDED\u FOR”]
,REMOTE\u ADDR
和UserHostAddress
都可以获得正确的客户端IP 也许你可以试试这个。