Memo

20230924 nuos0tel

今天把 home-lab 跑的各种 WEB 服务去掉了 Caddy,直接由 Traefik 反代。 之前因为不想每次起新服务时手动添加 Caddy 记录,所以使用了 On-Demand TLS。启用这个功能后,一旦一直被外部使用不存在的域名尝试访问,就会一直发起质询,直到被滥用限制熔断。所以我写了一个脚本来拒绝 caddy...

今天把 home-lab 跑的各种 WEB 服务去掉了 Caddy,直接由 Traefik 反代。

之前因为不想每次起新服务时手动添加 Caddy 记录,所以使用了 On-Demand TLS。启用这个功能后,一旦一直被外部使用不存在的域名尝试访问,就会一直发起质询,直到被滥用限制熔断。所以我写了一个脚本来拒绝 caddy 对我不可能用到的域名申请证书。目前看来,有很大的缓解,但是还是有比较多的漏网之鱼。

我从入手第一个 All in One 主机时,就已经使用 Caddy 了,后面服务越来越多,就在后面套了一个 Traefik 做服务发现,方便我管理和反向代理各个服务。这次为了避免滥用签发机构的 API,所以直接去掉 Caddy 了,让 Traefik 直接上前线,同时自动签发证书的任务也交给它了。

我是使用 Docker Compose 部署绝大部分服务的,Traefik 也是,所以启用这个功能需要做以下几步:

  1. 开启 Traefik 自动申请证书:

在 Traefik 的启动命令追加以下几条:

--entrypoints.websecure.Address=:443
--certificatesresolvers.le.acme.tlschallenge=true
--certificatesresolvers.le.acme.email="your@email.address"
--certificatesresolvers.le.acme.storage="/acme/acme.json"
--certificatesresolvers.le.acme.httpchallenge.entrypoint=web
--certificatesresolvers.le.acme.caserver=https://acme-v02.api.letsencrypt.org/directory

/acme/acme.json 所有证书的保存位置,请根据自己的需要配置。email 填写自己的邮箱地址。

  1. 在每个需要启用 HTTPS 的服务的 labels 添加以下两行:
- 'traefik.http.routers.your-service.tls=true'
- 'traefik.http.routers.your-service.tls.certresolver=le'

注意 your-service 要替换成你的路由名称。le 是上一步设置的证书解析器的名称。

  1. 自动从 HTTP 跳转至 HTTPS
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"  
- "traefik.http.routers.redirs.entrypoints=web"
- "traefik.http.routers.redirs.middlewares=redirect-to-https" 

将上面几行追加到 Traefik 启动命令上,就能实现自动跳转。注意所有 WEB 服务都必须要配 HTTPS 访问。

参考:Traefik Let's Encrypt Documentation - Traefik