使用Caddy部署网站
Caddy是一个功能强大、可扩展的平台,用Go编写,可为您的网站、服务和应用程序提供服务。
大多数人使用Caddy用作Web服务器或者代理服务。我是想让我的网站和小程序支持quic,而Caddy是一种解决方案。在使用Caddy前,我使用nginx作为网站服务器,以及小程序后台接口服务的代理。目前我已经在服务器上部署了Caddy,并将小程序后台服务和网站都迁移到Caddy上。虽然我配置了HTTP3协议,但是HTTP3并没有生效。网站和小程序可以正常访问,使用的是HTTP2协议。我折腾了一段时间,还是没有找到问题点,依旧是HTTP2协议或HTTP1.1协议。这并没有达到我的初衷。
之所以给大家继续推荐Caddy,是因为Caddy确实有一些优势。我说下在我服务器部署Caddy之后的感受吧。首先,Caddy在配置上要比Nginx简单,下面会详细介绍一下Caddy配置Web服务器和代理。其次,Caddy天然支持HTTPS,这对于网站和小程序后台,有很大的优势,特别是小程序后台,微信强制要求必须是HTTPS。性能这块,可能因为我的网站比较小,我并没有感到太大的差异(凭感觉,没有经过性能工具测试)因为使用Nginx或Caddy,我的网站和小程序访问都非常流畅。网上的帖子说Nginx性能会更好,特别是高并发时。在内存使用上,Caddy要远远大于Nginx,我的服务器内存比较小,这块非常明显。Nginx在我服务器上的内存占用在1MB左右,而Caddy在20MB左右。
现在我们讲下Caddy如何安装?在Caddy 的官网上,详细的介绍了Caddy的安装方法,我以我的服务器CentOS7为例,介绍一下Caddy的安装。
yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy
安装非常简单,Caddy支持多种方法配置,API和配置文件,配置文件中又分JSON和Caddyfile。为了简单,这里仅介绍Caddyfile。如果你仅需要Web网站或服务代理。那么Caddyfile已经可以完全满足需求。如果你需要将Caddy作为Web服务平台,运行非常多的网站或者代理服务,那么你需要更深入的理解Caddy API。下面的配置都以我的网站和小程序后台服务为例。
先说下网站,我的网站【豆子笔记】(https://www.91demo.top)使用rust mdbook制作,通过编写Markdown文件,可生成静态的html文件。将生成的html文件上传到服务器某个目录。然后通过下面的配置,即可提供Web服务。让互联网用户访问你的网站。
下面是我的网站和反向代理配置文件,这些内容存储在/etc/caddy/Caddyfile文件中:
# 全局变量
{
email myemail@qq.com
servers {
protocols h1 h2 h3
}
}
# 日志,可共用
(logging) {
log {
output file /var/log/caddy/caddy.log {
roll_size 50MiB
roll_local_time
roll_keep 5
}
format console {
time_format rfc3339
time_local
}
level INFO
}
}
# 官网
www.91demo.top {
import logging
# 反向代理
# 开放接口
reverse_proxy /api/* localhost:9982
# mqtt
reverse_proxy /mqtt/ws localhost:18083 {
stream_timeout 5m
stream_close_delay 1m
}
# 静态网站
root * /web/dist/book
encode zstd gzip
file_server
redir /Ez12Pv https://imgs.91demo.top/visit.webp
redir /Ez12Pw https://imgs.91demo.top/wander.webp
}
# 图片资源
imgs.91demo.top {
import logging
root * /web/dist/images
# 图片
@static {
path_regexp \.(ico|gif|jpg|jpeg|png|svg|webp)$
}
header @static Cache-Control max-age=5184000
rewrite /Ez12Pv /visit.webp
rewrite /Ez12Pw /wander.webp
file_server
}
# API后台
mp.91demo.top {
import logging
reverse_proxy localhost:9981
}
# 管理后台
h.91demo.top {
import logging
root * /web/admin
encode zstd gzip
file_server
}
更详细的内容,请参考Caddy官方文档,我这里仅以我的配置文件为例,进行简单讲解。
Caddyfile中可以定义全局变量,放在文件的最前面。里面存放你的邮件地址,以及Caddy提供的服务协议。其中邮件地址用于申请SSL证书时使用。接着是共用模块,例如日志模块,日志模块中的output配置路径需要存在,例如/var/log/caddy/caddy.log这个路径需要存在,并且caddy文件夹的拥有者需要是caddy用户和caddy组。这是一个坑,如果没有权限,就不会生成日志文件。再下面的官网www.91demo.top就是静态网站的配置了。www.91demo.top域名必须存在并且解析到了服务器的IP地址上。{}大括号中的内容为www网站的配置内容,里面包含了两个反向代理,以及一个静态文件服务,以及两个跳转配置。分别表示的是访问/api/时反向代理到后端开放接口服务,访问/mqtt/ws时反向代理到mqtt Websocket服务,以及访问/ 提供网站静态文件服务,访问/Ez12Pv会进行图片跳转(关注公众号后会看到这两个图片链接)。imgs.91demo.top提供图片服务,图片服务添加了缓存时间,其它的服务都和www服务中类似,更多的基础知识内容可以参考网上Caddy使用。
我所讲的,是基于自己的理解,如果有不对的或者有疑惑的地方,欢迎评论沟通。如果你没有公网云服务器,您想要一台公网云服务器,从下面的链接购买有优惠。
想在阿里云购买,请使用这个链接:
https://www.aliyun.com/minisite/goods?userCode=zrqh6alb
想在腾讯云购买,请使用这个链接:
https://curl.qcloud.com/XX6que5w
通过以上链接购买,有很大优惠。
Caddy服务器的GitHub地址:
https://github.com/caddyserver/caddy