是否可以使用 caddy 进行本地开发,您有 https://mysite.loc 并使用 Caddyfile 作为本地主机上运行的服务的反向代理?
我的主机文件,所以我有本地 mysite.loc 域
127.0.0.1 mysite.loc
mysite.loc {
reverse_proxy /api localhost:5000
reverse_proxy /admin localhost:6000
reverse_proxy /graphql localhost:7000
reverse_proxy localhost:4000
tls ???
}
这就是我已经走了多远。我认为我需要以某种方式将 mysite.loc 指向正在运行的 caddy 守护进程,以便它可以拦截提供生成的证书的请求,然后我将在本地信任该证书,并充当重定向到本地运行的服务的代理。 我还认为我不需要自己生成任何证书球童应该这样做吗? 我还想避免使用 mysite.loc 的任何端口,例如 https://mysite.loc:4000 只是 https://mysite.loc,然后让 Caddy 处理其余的事情。我也想避免使用 docker。
我还没有测试过这个,但我的直觉反应是:不,你不能。
我的原因是 caddy 通过 Let's Encrypt (LE) 来保护 HTTPS,而 LE 的工作方式是通过 caddy 在服务器内部放置一个信标来验证站点,然后 LE 查询信标是否有正确的内容。因此,如果该站点仅位于本地主机上且未向 WAN 开放,那么 LE 将无法查询。 LE 需要访问权限。 您可以尝试将网站打开到 WAN,进行 LE 身份验证,然后将其关闭到 WAN,但我不认为这可行。
话虽这么说,如果您想要的只是本地开发人员的 HTTPS,请使用自签名证书。请记住,HTTPS 对于本地开发人员来说是愚蠢的,因为 HTTPS 的全部目的是在传输中加密,并且本地主机没有传输
似乎使用 .localhost 而不是 .loc 足以让任何想要开始使用的人获得 https,这是我最近的 Caddyfiles 之一
警告:我有点犹豫是否要将此作为答案发布,因为浏览器始终会自动获取更新,因此今天有效的内容可能在您下次打开浏览器时无效。
{
email [email protected]
log {
format console
}
}
www.{$DOMAIN} {
redir https://{$DOMAIN}{uri}
}
{$DOMAIN} {
@websockets {
header Connection *Upgrade*
header Upgrade websocket
}
reverse_proxy /graphiql {$API_SERVICE}
reverse_proxy /voyager {$API_SERVICE}
reverse_proxy /graphql {$API_SERVICE}
reverse_proxy /f/* {$API_SERVICE}
reverse_proxy @websockets {$CLIENT_SERVICE}
reverse_proxy {$CLIENT_SERVICE}
}
我建议尝试
mkcert,在成功安装 mkcert 后,运行 mkcert mysite.loc
生成证书,它应该返回类似以下内容:
Created a new certificate valid for the following names 📜
- "mysite.loc"
The certificate is at "./mysite.loc.pem" and the key at "./mysite.loc-key.pem" ✅
It will expire on 6 March 2025
然后在你的 Caddyfile 中添加 tls
指令
mysite.loc {
reverse_proxy /api localhost:5000
reverse_proxy /admin localhost:6000
reverse_proxy /graphql localhost:7000
reverse_proxy localhost:4000
tls mysite.loc.pem mysite.loc-key.pem
}
然后运行它,它应该就可以工作了!