logo
GitHub

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
}
}
}