前言
前面我们介绍了 Caddy
的入门用法,今天我们来介绍下 Caddy
的进阶用法,主要围绕 Caddyfile
来介绍反向代理,重定向,请求匹配等功能。
Caddy
支持将Nginx
配置转为Caddyfile
。
呆猫
反向代理
反向代理是什么?小穷子带着存折去找小柜子取钱,小柜子太忙就把卡给小箱子,让小箱子帮他处理。
关键点是用户未知。
正向代理是什么?小黄的儿子小紫要上学了,但是学校给报名,所以小黄去找教育局局长小绿让小绿带着小紫去学校报名。
关键点是用户已知,主观配置。
例子:假设我们想要搭建一个 Caddy
服务,通过访问这个服务可以反向代理到 Python
的 App
。
localhost:8000 file_server templates { mime .md text/html } reverse_proxy 127.0.0.1:9000 复制代码
访问 8000
端口试试
正常的,应该打开我们的首页,但是通过 Caddy
的反向代理,我们实际看到的是 Python
的 http.server
。
如果你想通过
Caddy
去代理跨域的服务,在目的服务中将Caddy
服务器加入白名单也是可以实现的。
重定向
重定向和反向代理的区别是,重定向是
Caddy
向浏览器发出重定向指定,实际客户端访问的是被重定向的服务器。而反向代理是Caddy
帮主动将客户端的请求在内部进行处理,客户端不感知。
redir http://localhost:9000 复制代码
内部重写
假设我们想要在 Caddy
服务器内部进行请求重写,我们可以这样做。
rewrite /rewrite / 复制代码
请求匹配器
实际在上面的内部重写例子中我们已经看到了请求匹配器的存在,其可以应用于 Caddy
的关于请求处理的所有地方,而且支持路径,命名等各中属性的匹配方式。
如内部重写例子,实际上 Caddy
托管的站点没有/rewrite
这个接口,但是我们通过请求匹配器可以拦截这个 URI
,并且将其重写到/
,这在请求拦截,请求处理,地址重写,重定向中有广泛的使用。
日志配置
当我们想要收集 Caddy
的日志时,我们可以向 Caddyfle
中加入以下配置即可。
log { output file log/access.log { roll_size 1gb roll_keep 5 roll_keep_for 720h } } 复制代码
注意:
Caddy
并不会自动创建目录和文件,需要我们自己创建。
认证配置
当我们想要为我们的站点增加认证时,我们可以在 Caddyfile
中增加如下配置。
basicauth /* { phyger <hash-password> } 复制代码
以上,其中的是散列密码的
base64
编码。我们怎么获取散列密码的 base64
编码呢?最简单就是用 Caddy
客户端生成(亲测只有这种办法可行)。
将如上截图中的代码替换掉 Caddyfile
中的即可。
此时,我们输入账号密码即可进入我们的站点。