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

如何为Azure托管网站搭建联盟白标(Whitelabel)服务?

我帮你一步步解决这个Azure上搭建联盟白标服务的404问题,你遇到的核心问题是Azure Web App默认只处理已绑定的域名请求,加上还没配置针对第三方白标域名的自定义逻辑,下面是具体的配置和代码实现方案:

一、先解决Azure Web App的域名识别问题

第三方域名(比如hello.example2.com)通过CNAME指向你的whitelabel.example.com后,Azure Web App因为没识别到这个陌生域名,直接返回404。这里有两种处理方式:

方式1:关闭主机名筛选(快速实现)

这是最简单的方式,让Web App接受所有传入的主机名请求:

  • 登录Azure门户,找到你的Web App,进入「配置」→「常规设置」
  • 找到「主机名筛选」,设置为「关闭」
  • 保存配置,等待生效

⚠️ 注意:关闭后任何人都可以把域名CNAME到你的白标域名,所以一定要在后续代码中添加合法性验证,防止恶意流量。

方式2:用Azure Front Door做入口(更安全)

如果不想关闭主机名筛选,可以用Front Door作为统一入口,转发所有合法的白标请求到你的Web App,同时在Front Door里配置允许的域名规则。这种方式更安全,但配置稍复杂,适合有较多联盟用户的场景。

二、确认DNS解析的正确性

先确保联盟用户的DNS配置没问题:

  • 让联盟用户将他们的域名(比如hello.example2.com)的CNAME记录指向你的whitelabel.example.com
  • 用nslookup hello.example2.com或dig hello.example2.com验证解析结果,确认最终指向你的example.com的IP地址
三、C#实现白标自定义逻辑

现在请求能到达你的Web App了,接下来用C#处理请求,识别联盟用户、验证合法性并执行定制逻辑。

1. 获取请求的主机名

在ASP.NET Core中,直接通过HttpContext.Request.Host就能拿到当前请求的域名,比如hello.example2.com。

2. 验证联盟用户的合法性

维护一个合法联盟用户的域名列表(可以存在appsettings.json或数据库中),请求过来时先校验:

// 在appsettings.json中配置合法域名
"AllowedWhitelabelDomains": [
  "hello.example2.com",
  "partnerA.example3.com"
]

// 在Controller或Middleware中验证
var allowedDomains = Configuration.GetSection("AllowedWhitelabelDomains").Get<List<string>>();
var requestHost = HttpContext.Request.Host.Host;

if (!allowedDomains.Contains(requestHost))
{
    // 非法请求,返回403禁止访问
    return Forbid();
}

3. 处理跳转或定制内容

根据你的需求,有两种常见处理方式:

方式A:跳转到主站并带联盟标识

如果希望用户跳转到你的example.com,同时带上联盟用户的标识(用于后续统计、佣金计算):

// 使用301永久重定向(利于SEO)或302临时重定向
return RedirectPermanent($"https://example.com?ref={Uri.EscapeDataString(requestHost)}");

方式B:显示定制化白标页面

如果要给不同联盟用户展示不同的页面(比如定制logo、内容),可以根据域名加载对应的配置:

// 从数据库或配置中获取该联盟用户的定制信息
var partnerSettings = await _partnerRepository.GetSettingsByDomain(requestHost);
// 传递定制信息到视图
return View("WhitelabelHome", partnerSettings);

4. 全局Middleware处理(可选)

如果希望所有请求都经过白标逻辑处理,可以创建一个自定义Middleware:

public class WhitelabelMiddleware
{
    private readonly RequestDelegate _next;
    private readonly IConfiguration _config;
    private readonly IPartnerRepository _partnerRepo;

    public WhitelabelMiddleware(RequestDelegate next, IConfiguration config, IPartnerRepository partnerRepo)
    {
        _next = next;
        _config = config;
        _partnerRepo = partnerRepo;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        var requestHost = context.Request.Host.Host;
        var allowedDomains = _config.GetSection("AllowedWhitelabelDomains").Get<List<string>>();

        // 跳过主站和自身白标域名,只处理联盟用户的域名
        if (requestHost != "example.com" && requestHost != "whitelabel.example.com" && allowedDomains.Contains(requestHost))
        {
            // 把联盟域名存入HttpContext,方便后续Controller/View使用
            context.Items["PartnerDomain"] = requestHost;
            // 如果要直接跳转,取消下面注释
            // context.Response.RedirectPermanent($"https://example.com?ref={Uri.EscapeDataString(requestHost)}");
            // return;
        }

        await _next(context);
    }
}

// 在Program.cs中注册Middleware
app.UseMiddleware<WhitelabelMiddleware>();
四、测试与调试
  1. 本地测试:修改本地hosts文件(路径:C:\Windows\System32\drivers\etc\hosts或/etc/hosts),添加127.0.0.1 hello.example2.com,然后启动项目访问http://hello.example2.com,验证逻辑是否生效。
  2. Azure测试:部署代码后,用curl -v https://hello.example2.com查看响应头,确认请求是否到达你的Web App,并且执行了自定义逻辑。
  3. 排查404:如果还是出现404,检查:
    • Azure Web App的「自定义域名」是否绑定了whitelabel.example.com
    • 「主机名筛选」是否已经关闭
    • DNS解析是否正确
五、关键注意事项
  • 安全防护:关闭主机名筛选后,一定要在代码中验证合法域名,避免恶意流量攻击。
  • SSL证书:如果联盟用户需要HTTPS访问,你需要在Azure Web App上配置通配符SSL证书,或者使用Azure Front Door的证书管理,确保所有请求都是HTTPS。
  • SEO优化:如果使用跳转,优先用301永久重定向;如果是白标页面,尽量直接渲染定制内容,避免跳转影响SEO。

内容的提问来源于stack exchange,提问作者Jaruwitt A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:27:36