Still the only web server to use TLS automatically and by default. Deploy and scale HTTPS effortlessly with Caddy 2.
以上这句话摘抄自Caddy2官网,简单讲,Caddy 是一个和Nginx用类型的Web Server
,但是他是新生代
产品相比Nginx而言,比Nginx更强更快更简单;作为一款Golang开发的产品,我本身也在学习Golang,所以对Caddy有着天然的亲近感;在一些实验性质的场景中,可以使用其部署体验,但在生产场景中,Nginx有着强大且成熟的社区,大家各取轻重。
说回我的需求,我的一个WEB服务部署在海外,套用了Cloudflare
的CDN,由于众所周知的原因,中国大陆经常无法使用,迫切需要解决。我的方案是,单独部署一台对大陆友好的WEB服务器,再对Cloudflare进行反向代理;可能有人问,为啥不直接对源站进行反代?我的理由是:减少技术复杂度,源站只需要对Cloudflare负责即可(其实是我懒...)。
准备环境
- 节点服务器,debian11系统,对大陆友好
- 加速域名,bbb.com(提前解析指节点服务器,保证已经生效)
- 源节点域名,aaa.com
也就是说,使用bbb.com
对aaa.com
进行加速;大陆aaa.com
打不开的地方,就使用bbb.com
操作步骤
安装Caddy2
root权限下执行:
apt update
apt upgrade -y
apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update
apt install caddy
安装成功,执行caddy version
出现以下截图,表示安装成功
修改Systemd
默认Caddy采用的配置文件是caddyfile
格式,个人不喜欢,遂改为json
格式,修改文件:/lib/systemd/system/caddy.service
,改为以下内容:
[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/config.json
ExecReload=/usr/bin/caddy reload --config /etc/caddy/config.json --force
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
改完执行systemcl daemon-reload
,保证没有问题
配置加速
建立配置文件:/etc/caddy/config.json
,修改为以下内容,里面对应域名酌情修改。
{
"admin": {
"disabled": true
},
"logging": {
"logs": {
"default": {
"writer": {
"output": "file",
"filename": "/var/log/caddy/access.log"
},
"level": "INFO"
}
}
},
"apps": {
"http": {
"servers": {
"bbb.com": {
"listen": [
":80",
":443"
],
"routes": [
{
"match": [
{
"host": [
"bbb.com"
]
}
],
"handle": [
{
"handler": "reverse_proxy",
"upstreams": [
{
"dial": "aaa.com:443"
}
],
"headers": {
"request": {
"set": {
"Host": [
"aaa.com"
]
}
}
},
"transport": {
"protocol": "http",
"tls": {
"insecure_skip_verify": false
}
}
}
]
}
]
}
}
}
}
}
改完之后执行systemctl restart caddy
重启服务,再systemctl status caddy
确保是否正常运行,随后访问bbb.com
测试是否成功(会自动申请配置SSL,80会自动跳转443,Caddy特性)