部署 Caddy + Cloudflare 实现用户自定义域名怎么做?

u1435638317 · 2023年11月20日 · 最后由 qichunren 回复于 2023年11月22日 · 910 次阅读

我做了一个 Rails 应用,我现在想让注册的用户可以自行绑定自己的域名。

我目前使用的是 VPS 上安装了 Caddy,然后搭配 Cloudflare,自动有就了 https 的功能

Caddy 中的配置:

rails_app_domain.com {
    reverse_proxy localhost:3000
}

在这个基础上,我怎么样实现注册的用户可以自行绑定自己的域名,可以对应到当前的 Rails 应用中来呢?控制器里我已经搞定了根据访问域名隔离用户数据了。

每次有一个注册用户设置了域名配置,修改 Caddy 文件,加入配置,然后重启 caddy 服务器,也不现实啊。应该不是这样做吧。

谢谢大家。

看你打算在 Cloudflare 还是 Caddy 处理 SSL。

在 Cloudflare 处理需要用它的 API:Cloudflare for SaaS https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/ 。注意 Cloudflare 和 Caddy 之间也要配置证书加密传输。

用 Caddy 处理可以看这篇文章:用 Caddy 自动申请主域名、子域名和自定义域名的 HTTPS 证书 https://geeknote.net/Rei/posts/2386

你好,请问这一步在 Cloudflare 中应该是怎么样配置呢?是配置一个 sitedomain.com A 记录指向服务器的 IP 吗?我这样做了,还是不行啊。 这个配置是这样吗:

我看了一下 caddy 启动的命令输出的日志都是正常的。我用浏览器访问 xxx.sitedomain.com 提示:DNS_PROBE_FINISHED_NXDOMAIN

u1435638317 回复

对于二级域名,你需要在 CF 的 DNS 中添加名称 * A 记录到你的 IP。

还有你先要确定是用 CF 处理证书还是 Caddy 处理证书,你现在是用 CF 处理证书,不需要看那篇 Caddy 的文章。

CF 处理证书,用 CF proxy 模式,添加自定义域名的时候用 CF API 添加。

Caddy 处理证书,用 CF DNS only 模式,没有 CF 防护,添加自定义域名按上面的文章配置自动处理。

成功了,就是缺少了 * 这个 A 记录。太感谢你了。谢谢!!!

提醒一下 CF proxy 的灵活模式,CF 到你服务器之间的流量没有加密,数据可能会被中间代理记录。建议用完全模式,在 CF Origin Server 管理页生成一个证书配置到 caddy 上。

https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/full/ https://developers.cloudflare.com/ssl/origin-configuration/origin-ca/

之前用了 OpenResty,接收所有域名指向到默认 Rails 应用(没有做数据隔离),配置自动获取 Let's Encrypt 就可用。

每一个客户有需要自己域名 cname 过来即可。

问题是有大量莫名的乱七八糟的域名解析过来,导致大量无效的证书获取触发 Let's encrypt 的 limit 限制。

还在找更好的方案

as181920 回复

caddy 在申请证书前可以访问后端 api 检查的。

我正在做相关的功能,这个帮了我的大忙。谢谢 @rei

需要 登录 后方可回复, 如果你还没有账号请 注册新账号