记住:Caddy 会自动为这个域名申请和续期 SSL 证书。
安装的部分请看我上一篇帖子,或者使用我的caddy管理脚本
curl -sS -O https://raw.githubusercontent.com/woniu336/open_shell/main/caddy_manager.sh && chmod +x caddy_manager.sh && ./caddy_manager.sh
格式规范的警告,使用以下命令修复
caddy fmt --overwrite /etc/caddy/Caddyfile
场景一:Docker 环境下的简单反向代理
以下配置适用于 Docker 环境,如果你有多个项目,只需要复制配置块并修改域名和端口即可:
(common_config) {
tls {
protocols tls1.2 tls1.3
}
header {
Permissions-Policy interest-cohort=()
Strict-Transport-Security max-age=31536000;
X-Content-Type-Options nosniff
Referrer-Policy strict-origin-when-cross-origin
X-XSS-Protection "1; mode=block"
-Via
-Alt-Svc
-Server
}
}
www.2345.com {
import common_config
reverse_proxy 127.0.0.1:80
}
portainer.2345.com {
import common_config
reverse_proxy 127.0.0.1:8000
}
new.example.com {
import common_config
reverse_proxy 127.0.0.1:8888
}
场景二:多站点管理与配置复用
当你管理多个网站时,重复写相同的配置会很繁琐。Caddy 的 import
功能可以让你定义可复用的配置片段,大大简化配置管理。
这个配置展示了如何使用配置片段来管理多个站点,同时处理域名重定向:
(common_config) {
tls {
protocols tls1.2 tls1.3
}
header {
Permissions-Policy interest-cohort=()
Strict-Transport-Security max-age=31536000;
X-Content-Type-Options nosniff
Referrer-Policy strict-origin-when-cross-origin
X-XSS-Protection "1; mode=block"
-Via
-Alt-Svc
-Server
}
}
2345.com {
redir https://www.2345.com{uri} permanent
}
www.2345.com {
import common_config
reverse_proxy 后端服务器ip:80
}
new.example.com {
import common_config
reverse_proxy 后端服务器ip:8888
}
配置详解
配置片段定义:(common_config)
定义了一个名为 common_config
的配置片段,包含了所有站点通用的配置。括号语法是 Caddy 定义片段的方式。
域名重定向:2345.com
块配置了从裸域名到 www 域名的永久重定向。{uri}
是 Caddy 的变量,表示原始请求的 URI 路径。
配置导入:import common_config
将之前定义的配置片段导入到当前站点块中,避免重复配置。
后端服务器配置:reverse_proxy 后端服务器ip:80
中的"后端服务器ip"需要替换为你实际的服务器 IP 地址,比如 192.168.1.100:80
。
场景三:负载均衡与高可用配置
对于生产环境,你可能需要配置负载均衡来提高服务的可用性和性能。这个配置展示了 Caddy 的高级负载均衡功能。
这是一个完整的负载均衡配置,包含了健康检查、故障转移和错误处理:
# 定义可复用的配置片段
(common_config) {
reverse_proxy {
to 后端服务器1:80 后端服务器2:80
# 负载均衡策略(可选:round_robin, least_conn, ip_hash)
lb_policy round_robin
# 故障转移配置
lb_try_duration 30s
lb_try_interval 250ms
# 被动健康检查
fail_duration 30s
max_fails 3
unhealthy_status 5xx
}
tls {
protocols tls1.2 tls1.3
}
header {
Permissions-Policy interest-cohort=()
Strict-Transport-Security max-age=31536000;
X-Content-Type-Options nosniff
Referrer-Policy strict-origin-when-cross-origin
X-XSS-Protection "1; mode=block"
-Via
-Alt-Svc
-Server
}
# 错误处理
handle_errors {
@5xx expression {http.error.status_code} >= 500
respond @5xx "服务暂时不可用,请稍后重试" 503
@4xx expression {http.error.status_code} >= 400
respond @4xx "请求错误" {http.error.status_code}
}
}
2345.com {
redir https://www.2345.com{uri} permanent
}
www.2345.com {
import common_config
}
后端服务器列表:to 后端服务器1:80 后端服务器2:80
定义了两个后端服务器。实际使用时,请替换为真实的服务器地址,例如:
to 192.168.1.10:80 192.168.1.11:80
负载均衡策略:
round_robin
:轮询(默认),按顺序分配请求least_conn
:最少连接,将请求分配给连接数最少的服务器ip_hash
:IP 哈希,根据客户端 IP 分配,确保同一客户端总是访问同一服务器
故障转移配置
重试机制:
lb_try_duration 30s
:在 30 秒内尝试故障转移lb_try_interval 250ms
:每次重试间隔 250 毫秒
健康检查配置
被动健康检查(基于实际请求):
fail_duration 30s
:服务器被标记为不健康后,30 秒内不会接收新请求max_fails 3
:连续失败 3 次后标记为不健康unhealthy_status 5xx
:5xx 状态码被视为失败
主动健康检查(定期探测):
health_uri /
:使用根路径进行健康检查health_interval 15s
:每 15 秒检查一次health_timeout 3s
:健康检查超时时间为 3 秒
错误处理配置
错误分类处理:
@5xx
匹配器:捕获 500-599 状态码的服务器错误@4xx
匹配器:捕获 400-499 状态码的客户端错误respond
指令:返回自定义错误页面
总结
通过这三个配置示例,你已经掌握了 Caddy 的主要使用场景:
- Docker 环境:适合简单的单应用部署
- 多站点管理:使用配置片段提高配置复用性
- 负载均衡:提供高可用性和容错能力
记住,Caddy 会自动处理 SSL 证书的申请和续期,你只需要确保域名正确解析到你的服务器即可。