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

ASP技术栈下Azure容器应用服务RemoteIpAddress获取异常问题咨询

可行解决方案

1. ASP.NET核心配置转发头中间件(优先方案)

该方案无需调整Docker网络配置,完全适配Azure容器应用的bridge网络强制规则,核心逻辑是解析负载均衡/Docker网关传入的X-Forwarded-For请求头获取真实客户端IP:

  • 在项目启动代码(Program.cs)中优先注册转发头中间件,配置示例如下:
var builder = WebApplication.CreateBuilder(args);

// 配置转发头规则
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    // 同时转发IP与协议信息
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    // 信任Docker内部172.0.0.0/8网段的所有转发请求
    options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("172.0.0.0"), 8));
    // 可按需添加Azure负载均衡网段到信任列表
});

var app = builder.Build();

// 注意:转发头中间件必须放在所有其他中间件之前注册
app.UseForwardedHeaders();

// 后续其他中间件注册逻辑(路由、认证、Ocelot等)
// ...
app.Run();

配置完成后,通过HttpContext.Connection.RemoteIpAddress即可直接获取真实客户端源IP。

2. Ocelot网关适配配置

如果当前架构中使用Ocelot作为入口网关,需要额外在Ocelot的全局配置中开启头部传递规则,确保真实IP头可以向下游服务传递:
在ocelot.json的全局配置节点添加如下内容:

"GlobalConfiguration": {
  "AllowForwardedHeaders": ["X-Forwarded-For", "X-Forwarded-Proto"]
}

补充说明

该问题本质是bridge网络模式下的默认SNAT机制导致,所有反向代理前置的部署架构都需要通过转发头传递真实客户端IP,无需依赖Docker网络模式调整即可修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:15:02