本文主要介绍 Caddy 的实际使用,配置 Caddy 使用 Caddyfile + CLI 的方式;文中所使用到的软件版本:Centos 7.9.2009、Caddy 2.4.6。
1、配置日志
{ log { output file /home/mongo/soft/caddy_2.6.4/caddy.log level INFO format console { time_local time_format wall_milli } } }
这里是在全局选项(只能位于 Caddyfile 的顶部)里配置日志,也可以在站点里配置日志。
output:日志输出位置,可以为:stderr、stdout、discard、file,默认为:stderr
level:日志级别
format:日志格式化,可以为:console、json、filter(包裹另一个编码器模块,允许每个字段的过滤)
time_local:使用本地时间
time_format:时间格式,wall_milli 格式:2006/01/02 15:04:05.000
2、静态文件
:8081 { root * /home/mongo/mysite #针对所有请求设置网站的根目录为:/home/mongo/mysite file_server /static/* browse { #只针对 /static/* 请求的静态文件配置 hide .git index index.html } }
browse:对没有索引文件的目录的请求,启用文件列表。
hide:设置要隐藏的文件或文件夹
index:索引文件列表,默认为:index.html index.txt
3、反向代理
http://10.49.196.33:8082 { reverse_proxy * http://10.49.196.31:8080 } :8083 { reverse_proxy /api/* { to http://10.49.196.31:8080 http://10.49.196.32:8080 lb_policy random health_uri /index.jsp health_interval 30s health_timeout 5s health_status 200 fail_duration 30s max_fails 1 unhealthy_latency 5s } }
简单的代理可以写在一行上,如:端口 8082;细粒度的代理配置可以放到一个块中,如:端口 8083。
参数说明:
to:代理的上游地址列表
lb_policy:负载均衡算法
health_uri:主动健康检查的 URI 地址
health_interval:主动健康检查的时间间隔
health_timeout:主动健康检查中,后端服务的超时时间(超过该时间认为服务不可用)
health_status:主动健康检查中,期望后端服务返回的状态码
fail_duration:被动健康检查中,记住一个失败请求的时间;从第一失败请求开始计时,超过该时间,重新计数失败的请求。
max_fails:被动健康检查中,fail_duration 内请求失败的最大次数,达到该值,认为后端服务不可用
unhealthy_latency:被动健康检查中,如果后端相应超过该时间,则认为请求失败
负载均衡有如下算法:
random:随机选择一个上游
random_choose <n>:随机选择两个或多个上游,然后选择负载最小的一个(n通常为2)。
first:根据配置中定义的顺序,选择第一个可用的上游
round_robin:依次轮询每个上游
least_conn:选择当前请求数最少的上游;如果有多个主机的请求数最少,那么就随机选择其中一个主机
ip_hash:将客户的 IP 映射到一个对应的上游
uri_hash:将请求的URI(路径和查询)映射到一个对应的上游。
header [field]:通过散列头的值,将请求头映射到一个对应的上游;如果指定的头字段不存在,将随机选择一个上游。
cookie [<name> [<secret>]]:在客户端第一次请求中,随机选择一个上游,并在响应中添加 Cookie(如果没有指定,默认 cookie 名称为 lb)。Cookie 的值是所选上游的拨号地址,用 HMAC-SHA256 加 密。在随后的请求中,根据 cookie 值映射到对应的上游。
4、Https
4.1、自动 Https
4.1.1、激活自动 Https
当监听地址中包含域名或 IP 时,Caddy 会激活自动 Https,自动生成相关的证书;如:
10.49.196.33:8084 { reverse_proxy * http://10.49.196.33:8081 }
Caddy 还会启动一个 http 的端口(默认:80),访问该端口会重定向到 Https 端口。由于普通用户没有启动 80 端口的权限,可以禁用重定向功能;在全局选项中新增配置:
{ auto_https disable_redirects }
或者修改 80 端口为普通端口,在全局选项中新增配置:
http_port 8080
4.1.2、禁用自动 Https
A、在全局选项中设置 auto_https 为 off
{ auto_https off }
B、监听地址中不提供任何域名或 IP
:8081 { reverse_proxy * http://10.49.196.31:8080 }
C、指定协议
http://10.49.196.33:8082 { reverse_proxy * http://10.49.196.31:8080 } http://:8083 { reverse_proxy * http://10.49.196.31:8080 }
D、手动加载证书
10.49.196.33:8085 { reverse_proxy * http://10.49.196.31:8080 tls ssl/server.pem ssl/server.key }
4.2、使用自定义证书
4.2.1、创建证书
A、生成根证书
openssl genrsa -out ca.key openssl req -new -key ca.key -out ca.csr openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.pem
B、生成服务端证书
openssl genrsa -out server.key openssl req -new -key server.key -out server.csr openssl ca -days 3650 -in server.csr -cert ca.pem -keyfile ca.key -out server.pem
C、生成客户端证书
openssl genrsa -des3 -out client.key 1024 openssl req -new -key client.key -out client.csr openssl ca -days 1500 -in client.csr -cert ca.pem -keyfile ca.key -out client.pem openssl pkcs12 -export -clcerts -in client.pem -inkey client.key -out client.p12
使用 OpenSSL 创建证书的详细说明可参考:OpenSSL 介绍(5)--数字证书;这里生成的证书假设都存放在 $CADDY_HOME/ssl 目录下($CADDY_HOME 为 Caddy 的安装目录)。
4.2.2、Caddy 中配置自定义证书
A、无需客户端认证
10.49.196.33:8085 { reverse_proxy * http://10.49.196.31:8080 tls ssl/server.pem ssl/server.key }
B、需要客户端认证
www.abc.com:8086 { reverse_proxy * http://10.49.196.31:8080 tls ssl/server.pem ssl/server.key { client_auth { mode require_and_verify trusted_ca_cert_file ssl/ca.pem } } }
客户端访问时需要使用客户端证书(client.p12)来访问;浏览器访问导入该证书即可,Java 客户端的访问可参考:Java调用Http/Https接口(2)--HttpURLConnection/HttpsURLConnection调用Http/Https接口。上述配的是个无效的域名,可以通过修改 hosts 文件来访问:
10.49.196.33 www.abc.com
访问效果如下:
注意:这里监听地址里配置的是域名,不能配置为 IP,否则会报如下错误:
strict host matching: TLS ServerName () and HTTP Host (10.49.196.33) values differ
标签:http,入门,--,ca,Caddy,server,pem,key,10.49 From: https://www.cnblogs.com/wuyongyin/p/17522130.html