记从Caddy1升级至Caddy2

前言

最早使用caddy是在2019年,由于能自动https相比nginx来说会方便一些,搭一个hexo的博客也够用了。虽然很早就注意到caddy有了v2版本,但是也没啥动力去升级,总觉得够用就行了。
最近把域名从cn迁移到了com,用了谷歌搜索的地址迁移工具,需要把旧域名301重定向到新域名。我的想法是新域名跟旧域名都使用同一个服务器,旧域名只剩下个sitemap,其他地址统统301重定向到新域名。
本来觉得这是一件挺简单的事,可是对着caddy v1的文档配置总是有点不对劲。开始怀疑自己的caddy版本是不是太旧了,干脆升级到最新版得了,便开始了从caddy v1到v2的迁移。下面跟大家分享一下迁移的过程。

迁移过程

本人使用的是Ubuntu

升级

第一次安装caddy大概是在两年前,当初是直接运行官方的脚本安装的。官方添加源的方式,可能会把现有的Caddyfile覆盖,建议先备份一下

1
mv /etc/caddy/Caddyfile /etc/caddy/Caddyfile.bak

添加完源后,直接apt install caddy就行了

修改配置文件

caddy官网就声明了,v2对v1并没有向后兼容性。在升级完后,果然无法使用现有的配置启动caddy,这时候只能对着官方文档慢慢配置了。

gzip配置

一启动service,gzip这行配置就报错了。查阅了官方文档,现在的配置是

1
encode gzip

也可以选zstd,不过并没有试过zstd在这种静态页面的压缩效果与浏览器兼容,还是保留了gzip。

静态网页配置

caddy v1的配置是

1
root path

官网的介绍是需要改成

1
root * path

不过改完之后打开还是一片空白,只有空荡荡的html标签,后面看了到GitHub issue有人提了类似的问题,原来是要配上file_server,在下面一行加上file_server即可。

反向代理

网站上的toolbox用到了反向代理,升级之后这部分的配置也失效了。不过修改这里并没有啥坑。
proxy改成reverse_proxy,header_upstream改成header_up,header_downstream改成header_down。v2默认的反向代理配置就支持了websocket,也没必要向v1那样配置了,配置上websocket反而会报错。

重定向

如果是直接重定向,v2跟v1并没有啥区别。但是我想实现旧的网站sitemap.xml不重定向,这种条件重定向还是有所区别的。
v2版本支持了matcher,甚至可以命名matcher,于是乎我就写了如下matcher和重定向。这样的重定向规则便排除了/sitemap.xml,其他地址将全部重定向到新网站

1
2
3
4
@notsitemap {
 not path /sitemap.xml
}
redir @not https://www.新网站.com{uri} permanent

小结

难得因为条件重定向这样的需求,才下定决心将caddy1升级至了caddy2,这种配置文件完全不向后兼容的升级,还是有点让人吐槽的。
由于对caddy配置不大了解,本站部分地址反向代理到了nginx提供的服务,下次研究一下用caddy代替nginx实现这些功能。

作者

ZhongHuihong

发布于

2021-09-03

更新于

2021-10-02

许可协议