You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure App Service上.NET Core 2应用在Application Insights中IP显示0.0.0.0原因

嘿,这个问题我之前帮不少开发者排查过,核心原因大多和Azure App Service的架构以及你配置的遥测采集方式有关,给你拆解几个常见的情况和解决办法:

为什么Application Insights里记录的IP是0.0.0.0?

1. App Service的反向代理特性导致

Azure App Service本质是运行在反向代理之后的,所有外部请求都会先经过Azure的前端负载均衡器/代理服务器,再转发到你的.NET Core应用。默认情况下,你的应用直接读取的是代理服务器的内部IP(也就是0.0.0.0这类内部地址),而不是真实的客户端IP。

2. 未正确配置Forwarded Headers中间件

.NET Core 2.x需要显式配置ForwardedHeaders中间件,才能让应用识别代理传递过来的真实客户端IP。如果没加这个配置,Application Insights自然只能拿到代理的内部IP。

修复步骤:

在Startup.cs的Configure方法里,把这段代码放在其他中间件(比如UseMvc)之前:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

同时,在ConfigureServices里配置Azure的可信代理IP段,确保应用信任这些来源的转发头:

services.Configure<ForwardedHeadersOptions>(options =>
{
    // Azure内部代理的IP段
    options.KnownProxies.Add(IPAddress.Parse("10.0.0.0/8"));
    options.KnownProxies.Add(IPAddress.Parse("172.16.0.0/12"));
    options.KnownProxies.Add(IPAddress.Parse("192.168.0.0/16"));
});

3. Application Insights遥采集未提取真实IP

如果你的AI遥测是默认自动采集的,可能没有正确解析X-Forwarded-For头里的真实IP。这时可以自定义遥测初始化器来手动提取:

先创建一个自定义初始化器类:

public class ClientIpTelemetryInitializer : ITelemetryInitializer
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public ClientIpTelemetryInitializer(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void Initialize(ITelemetry telemetry)
    {
        var requestTelemetry = telemetry as RequestTelemetry;
        if (requestTelemetry == null || string.IsNullOrEmpty(requestTelemetry.Context.Location.Ip))
        {
            var httpContext = _httpContextAccessor.HttpContext;
            if (httpContext?.Request?.Headers != null)
            {
                if (httpContext.Request.Headers.TryGetValue("X-Forwarded-For", out var forwardedFor))
                {
                    // 取第一个IP(因为X-Forwarded-For可能包含多个代理IP)
                    requestTelemetry.Context.Location.Ip = forwardedFor.ToString().Split(',')[0].Trim();
                }
            }
        }
    }
}

然后在ConfigureServices里注册这个初始化器和HttpContext访问器:

services.AddSingleton<ITelemetryInitializer, ClientIpTelemetryInitializer>();
services.AddHttpContextAccessor();

4. 特殊场景:部署在App Service Environment(ASE)

如果你的应用部署在隔离的ASE环境里,代理层级更多,需要调整ForwardedHeadersOptions的ForwardLimit参数,比如设置options.ForwardLimit = 2;,同时确认代理IP段是否匹配。


内容的提问来源于stack exchange,提问作者Leonardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:34:36