Caddy 反向代理进阶
本文详细介绍 Caddy 的反向代理功能及高级配置。
基础代理配置
简单代理
example.com { reverse_proxy localhost:8080}
多后端服务器
example.com { reverse_proxy backend1:8080 backend2:8080 backend3:8080 { lb_policy round_robin }}
负载均衡策略
轮询(Round Robin)
reverse_proxy { to backend1:8080 backend2:8080 lb_policy round_robin}
最少连接
reverse_proxy { to backend1:8080 backend2:8080 lb_policy least_conn}
IP Hash
reverse_proxy { to backend1:8080 backend2:8080 lb_policy ip_hash}
健康检查
基础健康检查
reverse_proxy backend:8080 { health_uri /health health_interval 10s health_timeout 5s health_status 200}
高级健康检查
reverse_proxy backend:8080 { health_uri /health health_interval 5s health_timeout 2s health_status 2xx health_body "healthy"}
请求头处理
修改请求头
reverse_proxy backend:8080 { header_up Host {upstream_hostport} header_up X-Real-IP {remote_host} header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Proto {scheme}}
响应头处理
reverse_proxy backend:8080 { header_down Access-Control-Allow-Origin * header_down X-Frame-Options DENY}
高级特性
故障转移
reverse_proxy { to primary:8080 to backup:8080 backup}
重试策略
reverse_proxy backend:8080 { try_duration 5s try_interval 250ms}
缓冲设置
reverse_proxy backend:8080 { buffer_requests buffer_responses max_buffer_size 100MB}
性能优化
连接池配置
reverse_proxy backend:8080 { transport http { dial_timeout 2s keepalive 30s keepalive_idle_conns 100 }}
WebSocket 支持
example.com { reverse_proxy /ws backend:8080 { transport http { websocket } }}
高级路由
基于路径的路由
example.com { reverse_proxy /api/* backend-api:8080 reverse_proxy /admin/* backend-admin:8080 reverse_proxy /* backend-main:8080}
条件路由
example.com { @api { path /api/* header Content-Type application/json } reverse_proxy @api backend-api:8080}
监控和调试
访问日志
reverse_proxy backend:8080 { log { output file /var/log/caddy/proxy.log format json level INFO }}
错误处理
reverse_proxy backend:8080 { handle_response { status 500 { respond "Server Error" 500 } }}