碎碎念[4] 吐槽 Caddy

系列文章:

开篇废话

这几天在配网站的时候突然想用 Caddy 而不是 Nginx 来安排,而 Caddy 在我第一印象中是挺好的,用脚写配置都能跑,上次用记得是一两年前,当时是拿来带 filebrowser 感觉还是很舒服的,然后 sjtug 的镜像服务也在用这个 获得了迟先生的认证 于是就来折腾了。

然而在配置的时候,相比 Nginx 感觉还是差了几个量级。

问题

TLS

Caddy 有个特性是会给网站自动申请 ssl 证书,这个也大概是 Caddy 的最靓的特点。
而我的实际情况是,我有个站是要上 ssl (xxx.xxxx.com),而另外的域名是上自签野卡作为 Cloudflare 的 origin server (*.xxxx.com),Caddy 大概配置如下

https://xxx-cf.xxxx.com {
  # 此处为自签15年野卡
  tls /etc/caddy/ssl/u.crt /etc/caddy/ssl/u.key
  root * /storage/ugoira/
  file_server
  header * {
    Access-Control-Allow-Origin *
    Content-Disposition attachment
  }
}
https://xxx.xxxx.com {
  # 此处忽略 tls
  root * /storage/ugoira/
  file_server
  header * {
    Access-Control-Allow-Origin *
    Content-Disposition attachment
  }
}

这样一看是没啥问题的吧?

然而实际情况是,Caddy 检测到了我已经有了 _.xxxx.com 的野卡证书,所以 xxx.xxxx.com 的证书 Caddy 自动匹配到了这个 _.xxxx.com 野卡证书而不是向 Let’s Encrypt 请求新的证书。

这个难不倒我 🌚 去看下文档再自定下证书渠道就好了

tls xxxxxxx@duck.com {
  issuer acme
}

看上去就是这个了!

然而配完后给我报了个错:

caddy[6719]: validate: adapting config using caddyfile: parsing caddyfile tokens for 'tls': /etc/caddy/conf.d/xxxx.com:16 - Error during parsing: cannot mix issuer subdirective (explicit issuers) with other issuer-specific subdirectives (implicit issuers)

不支持多个证书可还行。。。
搜索了一下,看上去什么解决方案都没有,浪费了好几个小时

80 自动跳转

Caddy 默认策略是 80 自动跳转到 443 去,感觉也是太过「贴心」的一个表现,如果有向我这种刁民就是懒得开 80 呢(80 由 Cloudflare 处理了,本地不需要)

示例配置文件 & 文档

Caddy 相比 nginx php 之类的 配置文件也过于简洁。
这样的「简洁」也就代表了我们无法按照之前直接抄机器上的例子,比如我想启用 gzip 还有日志之类的在 Nginx 只需要取消注释几行即可,而 Caddy 要去看 ta 的炫酷文档去找,并且能到能搜索到的现成配置也不多。

以及可能使用 config adapter 或者直接 API 也许更好配置?这里不想再折腾了,提及一下。 以及还有:

~>man caddy
No manual entry for caddy

我始终认为大型点的程序还是要在本地留下详细点的文档,可惜没有。

~>w3m https://caddyserver.com/docs/

总结

以上几点让我很快又换回 Nginx 了,至少人家配什么就是什么,没有给自己加太多戏。
并且 Nginx 是我从小学就用到现在的,也被无数大厂青睐,对于我来说大部分配置来说是闭着眼睛打,为何不继续用 Nginx 呢。

联想

这几个月想试试新鲜事物,比如说之前折腾的 MeiliSearch 还有现在说的 Caddy 。ta 们都属于新轮子,并且都在首页和文档展示了自己相对其它相同轮子的特点特别坑爹

在使用这些上当后就发现 折腾学习成本>体验,使用体验大打折扣 >_< 亦或者无法正常使用。

这对于以后自己的一些程序也是一个提醒,最好在配置方面不要为用户想太多东西,要弄「智能配置」也一定要给关闭选项或者修改的选项,最好不要擅自给用户做主,以及要让程序行为在各种配置下也能按照预期行为正常运行。
想到了前几天我一个项目的 issue 也是这样翻车的情况