Caddy 是由go语言开发的web 服务器 ,和nginx 功能作用相同。但是区别在于caddy 没有很多的依赖,或者说是插件。并且 caddy 实现了 ssl 证书每三个月自动续期,ssl 证书免费 。这意味着 使用 caddy 作为web 服务器 不再有nginx 的 ssl 证书 到期且付费的困扰。
以上优点是我研究caddy的动力之一。
centos7
yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy
查看caddy状态
systemctl status caddy
要启动caddy,需要建立一个root用户以外的账户,我这里新建的账户叫做caddy,以下为caddy的配置过程
建立一个用于存放网页文件的目录,如/var/www/html,命令如下:
mkdir /var/www
mkdir /var/www/html
建caddy用户
adduser -r -d /var/www/html -s /sbin/nologin caddy
建立caddy去加载配置文件的路径
mkdir /etc/caddy
建立一个空的caddy工作配置参数文件
touch /etc/caddy/Caddyfile
设置路径的访问权限
chown -R root:caddy /etc/caddy
创建用于存放ssl证书的路径
mkdir /etc/ssl/caddy
chown -R caddy:root /etc/ssl/caddy
chmod 0770 /etc/ssl/caddy
创建用于存放日志的路径
mkdir /var/log/caddy
chown -R caddy:root /var/log/caddy
最后再改一下/var/www/html 这个用于存放网页的路径权限
chown caddy:caddy /var/www/html
改一下配置文件里面的用户信息
查看caddy.service 文件位置
systemctl status caddy
查看 用户和组信息
cat /usr/lib/systemd/system/caddy.service
用户和组都是caddy就不用改了。
设置caddy进程开机自启
systemctl daemon-reload
systemctl enable caddy.service
现在还不能正常成功启动caddy呢,因为还没有配置网站参数信息。
配置网站信息
cd /etc/caddy/
vi /etc/caddy/Caddyfile
Caddyfile文件内容
www.xxx.com {
# Set this path to your site's directory.
root * /var/www/html
#log /var/log/caddy/caddy.log
# Email
tls user@163.com
# Enable the static file server.
file_server
# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080
}
上传前端网页文件到 /var/www/html目录下
启动caddy服务
systemctl start caddy
查看服务启动状态
systemctl status caddy -l
caddy
caddy start
caddy adapt
systemctl daemon-reload
systemctl restart caddy.service
systemctl status caddy.service
caddy run --config /etc/caddy/Caddyfile
caddy start --config /etc/caddy/Caddyfile
journalctl --no-pager -u caddy
(handle_info_log) {
log {
output file /var/log/caddy/info.log {
roll_size 100MiB
roll_keep_for 30d
}
format console {
time_format wall
time_local
}
level INFO
}
}
(handle_error_log) {
log {
output file /var/log/caddy/error.log {
roll_size 30MiB
roll_keep_for 30d
}
format console {
time_format wall
time_local
}
level ERROR
}
}
(handle_errors) {
handle_errors {
rewrite * /{err.status_code}.html
file_server
}
}
www.xxx.com {
encode gzip
import handle_errors
import handle_info_log
import handle_error_log
handle /b/* {
root * /opt/web
try_files {path} /b/index.html
file_server
}
handle /a/* {
root * /opt/web
file_server
}
reverse_proxy /framework/* {
header_down Access-Control-Allow-Origin *
header_down Access-Control-Allow-Methods GET,POST,OPTIONS
header_down Access-Control-Allow-Headers X-Requested-With
to localhost:8081
}
reverse_proxy /example/* {
to localhost:8081
}
@logsurl {
path_regexp logsurl ^/log/(.*)$
}
rewrite @logsurl /framework/{http.regexp.logsurl.1}
@upmsurl {
path_regexp upmsurl ^/upms/(.*)$
}
rewrite @upmsurl /framework/{http.regexp.upmsurl.1}
@systemsurl {
path_regexp systemsurl ^/system/(.*)$
}
rewrite @systemsurl /framework/{http.regexp.systemsurl.1}
@workflowsurl {
path_regexp workflowsurl ^/workflow/(.*)$
}
rewrite @workflowsurl /framework/{http.regexp.workflowsurl.1}
}
www.xxx.com : 80 {
...
}
客户端发送以下请求
https://www.xxx.com/framework/log/queryallLogs。
caddy 服务器会因为路径中的 https://www.xxx.com 开始 走下面这个代码块:
www.xxx.com {
}
接着 /framework/ 会匹配到 如下代码块 :
reverse_proxy /framework/* {
header_down Access-Control-Allow-Origin *
header_down Access-Control-Allow-Methods GET,POST,OPTIONS
header_down Access-Control-Allow-Headers X-Requested-With
to localhost:8081
}
@logsurl {
path_regexp logsurl ^/log/(.*)$
}
rewrite @logsurl /framework/{http.regexp.logsurl.1}
此时 reverse_proxy 反向代理 将 https://www.xxx.com/framework/代理成
https://localhost:8081;
那么 完整的路径地址 就是 https://localhost:8081/log/queryallLogs。
接着,caddy 发现 该路径的uri 是 以 /log/ 开头的,这时 路径重写指令rewrite 生效,最终路径变成 https://localhost:8081/framework/log/queryallLogs。
祝各位小伙伴学习愉快,欢迎交流。