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

Azure Functions使用dotnet-isolated模型时req.host返回localhost问题

Azure Functions隔离进程模型中获取真实Host的解决方案
  • 你的推测完全正确:隔离进程模型下,Functions宿主进程接收外部请求后,会转发到独立运行的ASP.NET Core应用进程,转发时请求的Host头会被设置为localhost,因此直接读取req.Host会得到localhost而非真实域名。

  • 可以通过X-Forwarded-Host头获取真实主机名,更规范的做法是配置ASP.NET Core的转发头中间件,让应用自动识别并同步真实Host信息:

    1. 在Program.cs中添加转发头配置:
    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.Configure<ForwardedHeadersOptions>(options =>
    {
        // 启用转发Host和Proto头
        options.ForwardedHeaders = ForwardedHeaders.XForwardedHost | ForwardedHeaders.XForwardedProto;
        // 信任Azure内部的私有IP段,确保转发头来自合法的宿主进程
        options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("10.0.0.0"), 8));
        options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("192.168.0.0"), 16));
    });
    
    var app = builder.Build();
    
    // 必须在其他中间件之前注册转发头中间件
    app.UseForwardedHeaders();
    
    app.MapFunctions();
    app.Run();
    
    1. 配置完成后,直接读取req.Host就能得到真实的域名(比如foobar.com),无需手动解析X-Forwarded-Host头。
  • 如果暂时不想配置中间件,也可以直接从请求头中读取真实主机:

    var realHost = req.Headers["X-Forwarded-Host"].FirstOrDefault();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:46:04