使用 Caddy 和自动 SSL 的具有固定子域的通用域部分?

Generic domain part with fixed subdomain using Caddy and auto SSL?

我想设置一个 Caddy 服务器,其中子域是静态的,但域部分是“通配符”,例如“api.*”

根据我对 Caddy 的理解,通配符可以用于完整域的一部分(*.domain.com 匹配 bar.domain.com 但不匹配 foo.bar.domain.com)。

此外,此配置会自动为任何指向我服务器的域以“api.*".

此处的“*”将直接是域,而不是任何子域(它适用于 api.domain.com,但不适用于 api.foo.domain.com)。

这是否可以使用简单的 Caddy 命令(例如 api.* { ... },我尝试过但没有成功),还是需要更复杂的实现?

感谢您的帮助!

我在 Caddy 社区的帮助下找到了可行的解决方案。

代码如下:

{
    on_demand_tls {
        ask    https://static.site.com/domain/verify
        interval 2m
        burst 5 
    }
}

static.site.com {
    ...
}

:443 {
    tls {
        on_demand
    }

    // Your custom config, for instance:
    reverse_proxy * ... 
}

漂亮的部分是通用 HTTPS 的 tls { on_demand } 部分,它将自动创建证书。但是,这可能会被任何将其 DNS 条目之一指向您的服务器的人滥用。

因此,为避免这种情况,Caddy 社区强烈建议您设置一个 on_demand_tls 来查询端点,并且仅当该端点 returns 为真时才允许创建 SSL 证书。

注意:ask 是 GET 请求,请勿遵循重定向!除了 200 状态代码之外的任何内容都将被视为失败,即使是 3xx!

ask url 将附加 ?domain 并允许您根据您的逻辑验证该域,例如域中的自定义值,如“开始于 static.*",并验证该域是否存在于您的数据库中(例如)。

如果您的 URL 已经包含一些查询参数,不用担心,Caddy 很聪明,可以添加它们。 (https://static.site.com/domain/verify?some=query 将变为 https://static.site.com/domain/verify?some=query&domain={domain}

Caddy 支持 https ask 参数,并且 URL 也可以是外部的,完全没有问题(不需要本地主机或本地服务器配置)。