Caddy proxy指令详解
简介
Caddy的proxy可以用于配置:
普通的反向代理
负载均衡:支持多策略,健康检查,故障转移
WebSocket代理
开启该指令后,Caddy的proxy中间件会添加一个可用于{upstream}的占位符,用于记录哪一个代理的处理的请求.
proxy完整语法格式为:
proxy from to... {
policy name[value]
fail_timeout duration
max_fails integer
max_conns integer
try_duration duration
try_interval duration
health_check path
health_check_port port
health_check_interval interval_duration
health_check_timeout timeout_duration
header_upstream name value
header_downstream name value
keepalive number
without prefix
except ignored_paths...
upstream to
insecure_skip_verify
preset
}
- from 被代理的请求的路径
- to 代理的断点,可以是多个,支持 http/https/quic/srv/unix/quic, 如果是 srv:// 或者 srv+https:// 则被认为是一个服务定位器,Caddy将通过SRV DNS去解析
- policy 负载均衡策略,必须有多个后端.如果后端是服务定位器则不可以,可选的有random, least_conn, round_robin, first, ip_hash, uri_hash 和 header, 默认为random
- fail_timeout 失败了的请求记住多久.如果在这期间达到了max_fails,则被考虑为挂掉了,不会再有请求发送过去,除非失败的请求被忘记了.默认为0,总是可用.
- max_fails 如果fail_timeout为0则无效,默认为1
- max_conns 每一个后端的最大请求数,默认0,没有限制,如果达到了返回502错误.
- try_duration 第一个上游失败了,挂起外面来的请求多久
- try_interval 某一个上游服务器挂了之后等待多久切换下一个上有服务器,默认250ms. 设置为0并且设置了duration可能占满cpu
- health_check 设置一个路径,Caddy将定期发出请求,如果返回200和399就认为正常,否则就不正常,然后提前定义的interval间隔里他就是被考虑不正常的.
- health_check_port 设置一个额外的检查端口,如果是服务定位器就无效
- health_check_interval 健康检查间隔,默认30s
- health_check_timeout 检查超时时间,默认60s
- header_upstream 传递到后方的头,可以多个,也可以用请求占位符
- header_downstream 修改返回的响应头
- keepalive 保持多少和后端之间闲置的连接,设置为0关闭keepalive
- without 去掉的前缀(/api/foo without /api 将访问 /foo. )
- except设置不代理的路径
- upstream 基本等同于to配置
- insecure_skip_verify 重载后端TLS认证,禁用HTTPS的安全功能
- preset 支持的有websocket和transparent
Presets
websocket等价于:
header_upstream Connection {>Connection}
header_upstream Upgrade {>Upgrade}
transparent等价于:
header_upstream Host {host}
header_upstream X-Real-IP {remote}
header_upstream X-Forwarded-For {remote}
header_upstream X-Forwarded-Proto {scheme}
负载均衡策略
- random (default) - 随机选择
- least_conn - 选择活跃连接最少的
- round_robin - 循环选择
- first - 按照配置中的顺序,选择第一个可用的
- ip_hash - 基于IP地址的hash值分配
- uri_hash - 基于URL的hash值分配
- header - 基于某个请求头的hash值分配

发表评论