今天正式和 caddy 说再见了,目前已经将 caddy 从我所有服务器上停用了。

最初决定使用 caddy 是因为它有以下几个优点:

  1. 单进程

  2. 自动签发 https 证书

  3. 反向代理配置简单

  4. 支持webdav

一直以来我也只用到这几功能:

  1. 自动签发 https 证书

  2. 反向代理

  3. webdav

最近随着对 web 需求的不断增加, caddy 的局限性也越来越明显:

  1. caddy v1caddy v2 两个版本非常混乱,网上能搜到资料非常少

  2. 官网放弃对 caddy v1 文档维护

  3. caddy v2 的配置规则以 json 为主,主要是来用给编程自动化用的,而不是给人手写的,即使提供了 caddyfile 格式,也不能完全覆盖 json 格式的功能。比如 caddyfileadmin 配置和 json 中的 admin 配置,就无法对应:

    json:

      "admin": {"disabled": false,
                      "listen": "",
                      "enforce_origin": false,
                      "origins": [""],
                      "config": {
                              "persist": false,
                              "load": {•••}
                      },
                      "identity": {
                              "identifiers": [""],
                              "issuers": [{•••}]
                      },
                      "remote": {
                              "listen": "",
                              "access_control": [{
                                      "public_keys": [""],
                                      "permissions": [{
                                              "paths": [""],
                                              "methods": [""]
                                      }]
                              }]
                      }
              },

    caddyfile:

              admin   off|<addr> {
                      origins <origins...>
                      enforce_origin
              }
  4. caddy v1 提供的 url 处理功能相对较弱, caddy v2 增加了一些,同样还是远远不够。

  5. caddy 的通用性还是太弱了,官方的文档写得不好,网上的资料也非常少,简单玩玩就好。

最后,当前我所有服务器都采用 nginx 作为 web 应用反向代理, https 证书采用 lego 签发。