Caddy简介
Caddy是一款功能强大,扩展性高的Web服务器,目前在Github上已有58K+Star。Caddy采用Go语言编写,可用于静态资源托管和反向代理。
Caddy具有如下特性:
Caddyfile简单配置:提供简单、易于理解的配置文件格式。
动态JSON API:可实时更新配置,无需重启服务器。
默认启用HTTPS:为每个托管站点自动启用HTTPS,无需额外操作。
高扩展性:能够支持数十万站点,非常适合大规模部署。
现代协议支持:原生支持HTTP/1.1、HTTP/2 和HTTP/3。
跨平台运行:无外部依赖,在任何平台上都能稳定运行。
基于Go语言:能提供更高的内存安全性和可靠性。
安装
使用Docker来安装Caddy是非常方便的,这里我们就使用Docker来安装。
首先使用如下命令下载Caddy的镜像;
docker pull caddy
然后使用如下命令运行Caddy容器。
docker run -p 80:80 -p 443:443 --name caddy \
-v /mydata/caddy/Caddyfile:/etc/caddy/Caddyfile \
-v /mydata/caddy/data:/data \
-v /mydata/caddy/site:/srv \
-d caddy
mall项目简介
由于我们之后要以mall项目的部署为例讲解Caddy的使用,这里简单介绍下mall项目。mall项目是一套基于 SpringBoot3+ Vue 的电商系统(Github标星60K),后端支持多模块和2024最新微服务架构,采用Docker和K8S部署。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!
项目演示:
使用
接下来就以我的mall电商实战项目的部署为例,来讲解下Caddy的使用。
静态代理
静态代理就是将请求代理到静态资源上去,这里我们将对mall.macrozheng.com的请求代理到mall电商实战项目的前端项目中去。
首先我们修改下本机的host文件:
192.168.3.101 mall.macrozheng.com
然后将mall项目后台管理系统的前端项目上传到/mydata/caddy/site目录下;
然后修改Caddyfile中的配置,再使用docker restart caddy命令重启下Caddy容器;
http://mall.macrozheng.com {
root * /srv/mall
file_server browse
}
此时我们通过该地址就可以访问到mall项目的后台管理系统了:mall.macrozheng.com
动态代理
动态代理就是把代理服务器的请求转发到另一个服务上去,这里我们将把对api.macrozheng.com的请求代理到演示环境的API服务上去。
首先我们修改下本机的host文件:
192.168.3.101 api.macrozheng.com
然后修改Caddyfile中的配置,再使用docker restart caddy命令重启下Caddy容器;
http://api.macrozheng.com {
reverse_proxy http://admin-api.macrozheng.com
}
此时我们通过该地址就可以访问到mall-admin服务的API文档了:api.macrozheng.com/swagger-ui/
按目录划分
有时候我们需要通过同一个域名的不同子目录来访问不同的前端项目,比如通过/admin目录访问mall后台管理系统,通过/app目录访问mall前台商城系统。
此时可以对目录进行如下划分;
mall.macrozheng.com/admin #访问mall后台管理系统
mall.macrozheng.com/app #访问mall前台商城系统
这里先把前台商城系统的前端项目上传到/mydata/caddy/site目录下;
修改Caddyfile中的配置,然后重启下Caddy容器;
http://mall.macrozheng.com {
route /admin/* {
uri strip_prefix /admin
file_server {
root /srv/admin
}
}
route /app/* {
uri strip_prefix /app
file_server {
root /srv/app
}
}
}
此时我们通过该地址就可以访问到mall项目的后台管理系统了:mall.macrozheng.com/admin/
此时我们通过该地址就可以访问到mall项目的前台商城系统了:mall.macrozheng.com/app/
文件压缩
如果我们的服务器带宽比较低,网站访问速度会很慢,这时我们可以通过让Caddy开启Gzip压缩来提高网站的访问速度。这里我们以mall的前端项目为例来演示下它的提速效果。
首先修改Caddyfile中的配置,使用encode指令开启Gzip压缩,修改完成后重启Caddy容器;
http://mall.macrozheng.com {
root * /srv/mall
encode {
gzip
}
file_server browse
}
有个比较大的JS文件未开启压缩前是1.7M,开启压缩后是500K左右。
地址重写
有的时候我们的网站更换了域名,但还有用户在使用老的域名访问,这时可以通过Caddy的地址重写功能来让用户跳转到新的域名进行访问。
我们需要修改Caddyfile中的配置,使用redir指令重写地址,修改完成后重启Caddy容器;
http://mall.macrozheng.com {
redir https://www.macrozheng.com
}
此时访问旧域名mall.macrozheng.com会直接跳转到www.macrozheng.com去。
Caddyfile语法规则
如果大家想要深入学习Caddyfile的语法的话,这里有对应的规则图和解释,大家可以参考下。
Caddyfile的具体语法规则如图: