Caddy 入门实战(2)--简单使用

本文主要介绍 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

 

posted @ 2023-08-13 11:00  且行且码  阅读(2225)  评论(0编辑  收藏  举报