Caddy是一个Go编写的Web服务器,类似于Nginx,Caddy提供了更加强大的功能,相较于Nginx来说使用
Caddy有如下优势:
- 自动的
HTTPS
证书申请 - 自动证书续期以及
OCSP stapling
等 - 更高的安全性包括但不限于TLS配置以及内存安全等
- 友好且强大的配置文件支持
- 支持
API
动态调整配置 - 支持
HTTP3(QUIC)
- 支持动态后端,例如连接
Consul
、作为k8s ingress
等 - 后端多种负载策略以及健康检测等
- 本身
Go
编写,高度模块化的系统方便扩展
安装
官网地址:https://caddyserver.com/docs/install
通过github的链接可以快速部署。
wget -N –no-check-certificate https://raw.githubusercontent.com/iiiiiii1/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
#备用地址
wget -N –no-check-certificate https://www.moerats.com/usr/shell/Caddy/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
你可以用来验证安装是否成功
/etc/init.d/caddy status
当然也可能报错,报错请根据报错内容,进行添加相关环境。
服务管理
-
启动:
/etc/init.d/caddy start
-
停止:
/etc/init.d/caddy stop
-
重启:
/etc/init.d/caddy restart
-
查看状态:
/etc/init.d/caddy status
-
查看Caddy启动日志:
tail -f /tmp/caddy.log
-
Caddy配置文件位置:
/usr/local/caddy/Caddyfile
-
Caddy自动申请SSL证书位置:
/.caddy/acme/acme-v01.api.letsencrypt.org/sites/xxx.xxx(域名)/
如果你想要卸载Caddy
,请使用下面的命令,运行后输入y
即可卸载。
wget -N –no-check-certificate https://raw.githubusercontent.com/iiiiiii1/doubi/master/caddy_install.sh && bash caddy_install.sh uninstall
#备用地址
wget -N –no-check-certificate https://www.moerats.com/usr/shell/Caddy/caddy_install.sh && bash caddy_install.sh uninstall
修改配置文件,这一步很关键,你所有的对于
caddy
的配置写法都是在这里。
vim /usr/local/caddy/Caddyfile
常见配置
配置模块化
import
指令除了支持引用配置片段以外,还支持引用外部文件,同时支持通配符,有了这个命令后就可以方便的将配置文件进行模块化处理:
*
为通配符
#这一部分有问题,后来搞明白了重新写的
其实想模块化管理很简单,你只需要在修改配置文件“/usr/local/caddy/Caddyfile”
的时候只加 “import ./(统一名称)* ”
或者“import (模块化文件地址)”
举个例子 我是使用的“import ./caddy_* ”
,它的意思就是在“/usr/local/caddy/”
文件夹下所有的“caddy_(随便的编号)”
都被引用为配置文件。
HTTPS
填写自己的域名 {
root * /var/www
file_server
}
你的域名{
gzip
tls (邮箱
proxy 访问的地址或者127.0.0.1:端口
}
就算写了端口号,只要不是80
,也会使用SSL
证书。
这个是可以自动申请ssl
证书的
注意一个域名下的子域名都可以申请证书,但是第一个申请的速度较快,后续的会稍慢点。
HTTP
如果不想使用SSL
证书,单纯的HTTP
访问有以下方式。
填写自己的域名:80 {
root * /var/www
file_server
}
# 或者
http://填写自己的域名 {
root * /var/www
file_server
}
# 或者
http://填写自己的域名:8888 {
root * /var/www
file_server
}
自定义SSL证书
当自己有证书时,把相关证书上传,个人建议放在root
路径里,当然不是root
路径也可以。
填写自己的域名 {
root * /var/www
tls 公钥路径(这里有个空格)私钥路径
file_server
}
同时映射多个地址
localhost:8888,
填写自己的域名一,
填写自己的域名二 {
root * /var/www
tls 公钥路径(这里有个空格)私钥路径
file_server
}
反向代理
填写自己的域名 {
reverse_proxy localhost:6000
}
访问https://qoant.com
实际上访问的是服务器的6000
端口。
利用以下配置可将https://qoant.com/proxy
反向代理到localhost:6000
。
填写自己的域名 {
reverse_proxy /proxy localhost:6000
}
重定向
填写自己的域名一 {
redir https://填写自己的域名二{uri}
}
访问域名一会302 Redirect
重定向到域名二
。
域名一 {
redir https://域名二{uri} permanent
}
访问域名一会301 Move permanently
重定向到域名二
。
负载均衡
填写自己的域名 {
reverse_proxy localhost:9000(一个端口) localhost:9001(另一个端口) {
lb_policy first
}
}
Websocket反向代理
填写自己的域名 {
# HTTP代理配置
# 此时访问自己的域名,实际访问的是127.0.0.1:8080/app/的内容
reverse_proxy / 127.0.0.1:8080/app/
# WebSocket代理配置
# 客户端请求的wss://ws.xxx.com/ws,实际为wss://127.0.0.1:8080/ws
reverse_proxy /ws 127.0.0.1:8080
}
跨域访问
(cors) {
@origin header Origin {args.0}
header @origin Access-Control-Allow-Origin "{args.0}"
header @origin Access-Control-Request-Method GET
}
域名 {
import cors 另一个域名
}
合法的地址格式:
localhos
texample.com:443
http://example.com
localhost:8080
127.0.0.1
[::1]:2015
example.com/foo/*
*.example.com
http://