记从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 | @notsitemap { |
小结
难得因为条件重定向这样的需求,才下定决心将caddy1升级至了caddy2,这种配置文件完全不向后兼容的升级,还是有点让人吐槽的。
由于对caddy配置不大了解,本站部分地址反向代理到了nginx提供的服务,下次研究一下用caddy代替nginx实现这些功能。
记从Caddy1升级至Caddy2
https://www.huihongcloud.com/2021/09/03/caddy/记从Caddy1升级至Caddy2/