简介
Caddy的proxy可以用于配置:
- 普通的反向代理
- 负载均衡:支持多策略,健康检查,故障转移
- WebSocket代理
开启该指令后,Caddy的proxy中间件会添加一个可用于{upstream}
的占位符,用于记录哪一个代理的处理的请求.
proxy完整语法格式为:
proxy from to... {policy name [value]fail_timeout durationmax_fails integermax_conns integertry_duration durationtry_interval durationhealth_check pathhealth_check_port porthealth_check_interval interval_durationhealth_check_timeout timeout_durationheader_upstream name valueheader_downstream name valuekeepalive numberwithout prefixexcept ignored_paths...upstream toinsecure_skip_verifypreset}
- 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值分配
via.https://toaco.github.io/2018/03/05/Caddy%20proxy%E6%8C%87%E4%BB%A4%E8%AF%A6%E8%A7%A3/