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

自定义域名的On Demand TLS与反向代理路径转发问题

解决方案:Caddy实现带路径映射的反向代理

Caddy 原生配置方案(无需额外插件)

你可以通过正则捕获请求域名 + 路径重写的组合,实现自定义域名到指定后端路径的反向代理,完美适配你的需求。以下是具体的Caddyfile配置:

{
    # 可选但推荐:配置On-Demand TLS的域名验证接口,防止恶意滥用
    on_demand_tls {
        ask http://my-app.com/api/validate-domain
    }
}

# 你的CNAME目标域名
status.myserver.com {
    tls {
        on_demand
    }

    # 匹配符合格式的自定义域名(如status.google.com),并提取站点标识(如google)
    @matchCustomHost host_regexp ^status\.([^\.]+)\.com$

    # 重写请求路径:将原路径(如/或/uptime)替换为/status-page/{站点标识}/原路径
    rewrite @matchCustomHost /status-page/{re.host.1}{uri}

    # 反向代理到my-app.com
    reverse_proxy my-app.com {
        # 可选:传递原请求的Host头给后端(如果my-app.com需要根据该域名做验证)
        header_up Host {host}
        # 若后端不需要原Host,可替换为:header_up Host {upstream_hostport}
    }
}

配置说明:

  1. host_regexp 规则:通过正则^status\.([^\.]+)\.com$捕获自定义域名中的站点标识(比如status.google.com中的google会被存在{re.host.1}变量里)。
  2. rewrite 规则:将用户的请求路径(比如访问status.google.com/uptime)重写为/status-page/google/uptime,确保后端能正确路由。
  3. On-Demand TLS 验证:ask指向的接口需要接收?domain=xxx参数,返回200表示该域名已在你的系统中绑定,4xx则拒绝签发证书,避免被恶意域名滥用。

灵活适配非固定格式域名

如果用户的自定义域名格式不统一(比如有的用my-status.google.io),正则捕获无法覆盖,你可以:

  1. 在my-app.com中存储自定义域名与站点标识的映射关系。
  2. 用Caddy的http.request.vars插件或自定义中间件,在请求时调用内部API获取当前域名对应的站点路径,再动态重写。不过这种方式需要额外开发,建议优先约定域名格式简化实现。

替代工具:Nginx

如果你考虑更换工具,Nginx同样可以实现需求,且正则处理更灵活,只是On-Demand TLS需要依赖acme.sh或certbot的自动签发脚本:

server {
    listen 80;
    listen 443 ssl;
    server_name status.myserver.com;

    # 配置SSL证书自动签发(需结合acme.sh等工具)
    ssl_certificate /path/to/auto/cert;
    ssl_certificate_key /path/to/auto/key;

    # 从自定义域名中提取站点标识
    if ($host ~* ^status\.([^\.]+)\.com$) {
        set $site_id $1;
    }

    location / {
        # 重写路径到后端指定位置
        rewrite ^/(.*)$ /status-page/$site_id/$1 break;
        proxy_pass http://my-app.com;
        # 传递原Host头给后端
        proxy_set_header Host $host;
    }
}

注意事项

  • 确保my-app.com的路由系统能正确处理/status-page/{site_id}的请求,且可以验证请求的Host头是否与站点绑定,防止未授权访问。
  • On-Demand TLS的验证接口必须配置,否则可能被恶意域名攻击,导致CA限制你的证书签发权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:18:24