Caddy服务器指南
Caddy指南
Caddy指南
- 什么是Caddy–>一个类似于nginx的服务器,默认全程https,用Go语言实现。
- Caddy官网–>https://caddyserver.com/
- Caddy中文文档–>https://caddy2.dengxiaolong.com/
安装Caddy
- 安装方法默认和nginx不同,因为目前使用部署很广泛,因此需要手动去安装。
下载主文件
* 去官网下载[Download Caddy (caddyserver.com)](https://caddyserver.com/download)
* 安装插件[Download Caddy (caddyserver.com)](https://caddyserver.com/download)
建立目录体系
- 建立用户
#redhat系
adduser -r -d /var/www -s /sbin/nologin caddy #debian系
adduser --system --group --disabled-login --home /var/www --shell /sbin/nologin caddy
- 建立目录
#配置文件目录:
mkdir /etc/caddy && chown -R root:caddy /etc/caddy
#配置文件:
touch /etc/caddy/Caddyfile
#SSL证书存放目录:
mkdir /etc/ssl/caddy && chown -R caddy:root /etc/ssl/caddy && chmod 0770 /etc/ssl/caddy
#网站主目录:
mkdir /var/www && chown caddy:caddy /var/www
#编辑systemd单元:
vi /etc/systemd/system/caddy.service
- 写入systemd单元内容
[Unit]
Description=Caddy HTTP/2 web server
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service[Service]
User=caddy
Group=caddy
Restart=on-abnormalExecStart=/usr/local/bin/caddy run --config=/etc/caddy/Caddyfile --adapter=caddyfile
ExecReload=/bin/kill -USR1 $MAINPID
; Use graceful shutdown with a reasonable timeout
KillMode=mixed
KillSignal=SIGQUIT
TimeoutStopSec=5s
ProtectSystem=full[Install]
WantedBy=multi-user.target
- 重载systemd:
systemctl daemon-reload
- 防火墙放行端口:(CentOS)
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
- 解决Debian端口绑定权限问题:
apt-get install libcap2-bin -y
setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/caddy
#(caddy路径如果不对,可通过which caddy得出)
正向代理
- 建立网站
localhost
respond "Hello World!"
-
默认使用https进行访问,会自动生成本地的证书
-
建立多个网站,使用花括号指定
localhost {respond "Hello, world!"}localhost:2016 {respond "Goodbye, world!"}
反向代理
- 短期反向代理,直接从命令行输入:
caddy reverse-proxy --from 127.0.0.1:7789 --to 172.17.0.2:8080
- 通过Caddyfile指定,在同一个目录下面执行caddy run
localhost
reverse_proxy 127.0.0.1:9000localhost:2016
reverse_proxy 127.0.0.1:9000
身份验证
- 在Caddy v2中,使用basicauth来实现401验证
- 需要先生成hash密码
caddy hash-password
- 接着在已经创建的网站中设置basicauth模块
www.example.com {basicauth * {Bob <Hash-密码>}respond "Hello World!"
}
- 多模块导入:如果我们需要通过多个模块来进行导入,那么我们需要指定一个模块对象
(basic-auth) { basicauth /secrets/* {(username) (hashed password) }
} mytest.mydomain.tld { import basic-auth ...
}