caddy 学习

121 阅读3分钟

caddy是一个开源的web server,是nginx的一个替代品。它支持自动https。

今天下午只学了一点点。没关系,今后慢慢学,再来更新。

我今天下午学的东西是使用caddy运行https服务

使用caddy运行https服务

先修知识

https和http最大的区别,就是https中s,也就是secure。https的两端是加密通信的。 https使用 TLS (SSL)来加密http请求和响应。关于SSL/TLS协议运行机制,看这篇文章www.ruanyifeng.com/blog/2014/0…

注意这里提到SSL/TLS协议是需要服务端给出证书的,这个证书里有服务端的身份信息。

准备域名

为什么需要域名?前面提到SSL/TLS协议需要服务端给出证书。SSL证书可以绑定IP,也可以绑定域名。但是一般的做法是绑定域名。我也选择了绑定域名。但这里不需要人工获取证书。因为caddy会自动使用acme来获取证书。

看了这个知乎问题现在去哪里买 .com 域名最便宜?后,我选择了namecheap。购买了1年的xyc986327386.com域名。包含以下子域名*.xyc986327386.com。另外在racknerd买了1年的VPS,它有固定IPV4地址。 然后进行了绑定

image.png 以上2个record,@匹配xyc986327386.com,*匹配*.xyc986327386.com

有了域名,剩下的就交给caddy了。

caddy 操作

给出一个这样的配置文件。 这个配置文件,配置了2个服务。

  1. blog.xyc986327386.com自动重定向到https://juejin.cn/user/2612095360173256
  2. xyc986327386.com给出文本响应Hello!
blog.xyc986327386.com {
	redir https://juejin.cn/user/2612095360173256
}

xyc986327386.com {
	respond "Hello!"
}

然后输入命令sudo caddy run --config Caddyfile即可 试一下 image.png 可以看到这里有个锁,表示https。成功了。

caddy API

caddyserver.com/docs/api-tu… 这里讲了,如何使用restful api来读写caddy的配置。

  1. 可以直接post一个json格式的配置文件。
  2. 也可以把配置当做1棵树,通过类似xpath的方式,来修改某个部分的配置。

caddyfile

  1. 为了方便地学习caddy的配置,可以使用caddy run --watch进行自动重载
  2. caddy 作为file_server时,可选支持模板。模板模式下,可以根据上下文动态生成html响应。
  3. 通过reverse_proxy指令,可以实现反向代理。此指令接受通配符,这样可以只对匹配到的请求,进行此操作。

log

log指令可以配置日志,示例如下

xyc986327386.com {
	respond "Hello!"
	log {
		output file /var/log/caddy/access.log
	}
}

这里把对xyc986327386.com的请求的日志写进了/var/log/caddy/access.log里。注意,应该把日志文件夹的owner设置为caddy,要不然应该会遇到没有权限的问题。

作为服务运行

在caddy基础知识的学习中,caddy run --watch是个比较好的方法。但是,一个web服务应该可以后台运行,不应在关闭控制台时停止。此时可以选择把它作为服务运行。 如果安装了caddy,那它是自动配置好了service了的。但我其实没有安装过caddy,只是下载了它,所以需要人工配置它的service。 按照这里的方法caddyserver.com/docs/runnin… ,下载一个service文件github.com/caddyserver… ,放在/etc/systemd/system/caddy.service即可。(话说,linux service这一套我还没仔细学过,有空得仔细学学)

另外,还可以通过journalctl -u caddy --no-pager来看它的日志。但是这里没有请求日志,请求日志需要单独配置,跟这不是一套东西。

总结

今天就学到这里了,caddy看起来挺人性化的。今天几乎没遇到什么难题。 等以后学会更多东西之后,再回来更新。