自动HTTPS
当符合下面一些合理的标准时,Caddy会自动为所有站点启用HTTPS:
- 主机名
- 不为空
- 不是localhost
- 不是一个IP地址
- 不超过一个通配符(*)
- 通配符必须是最左边的标签
- 没有显式指定端口为80
- 没有显式指定使用http协议
- TLS没有在站点的定义中被关闭
- 不是你自己提供的证书和密钥
- Caddy能够绑定到端口80和443(除非使用DNS验证)
Caddy还会将所有HTTP请求重定向到与HTTPS对应的地址,只要Caddyfile中没有定义主机名的纯文本变体。
安装部署
- docker-compose.yml
version: "3"
services:
caddy:
container_name: caddy
image: caddy:alpine
restart: unless-stopped
ports:
- "80:80"
- "80:80/udp"
- "443:443"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy/:/data/caddy/
- Caddyfile
:80 {
redir https://{host}{uri}
}
uing.vip {
log {
output stdout
format console
level ERROR
}
root * /var/www/uing.vip
handle_errors {
rewrite * /404.html
file_server
}
file_server
}
gitea.uing.vip {
log {
output stdout
format console
level ERROR
}
reverse_proxy gitea:3000
}
如果需要接入 Cloudflare CDN 上
- 打开 https://dash.cloudflare.com/ 注册登录
- 添加网站,更改域名的 DNS
- 打开 https://dash.cloudflare.com/profile/api-tokens
- API 令牌 -> 创建 API 令牌 -> 编辑区域 DNS -> 选择模板 -> 区域资源 -> 对应网站
- 获取到的API KEY -> docker-compose.yml -> caddy 容器 -> 替换 CF_API_TOKEN 环境变量 -> 替换 DOMAIN 环境变量(也可以是二级或三级域名)
- https://dash.cloudflare.com -> 对应网站
- SSL/TLS -> 源服务器 -> 源证书 -> 经过身份验证的源服务器拉取 -> 打开
- SSL/TLS -> 概述 -> 您的 SSL/TLS 加密模式为 -> 完全(严格)
- docker-compose.yml
version: "3"
services:
caddy:
container_name: caddy
build:
dockerfile: ./caddy-cloudflare-Dockerfile
restart: unless-stopped
depends_on:
- sing-box
# - subconverter
ports:
- "80:80"
- "80:80/udp"
- "443:443"
- "443:443/udp"
environment:
- CF_API_TOKEN=XXX
- DOMAIN=XXX
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy:/data/caddy
- Caddyfile
{env.DOMAIN} {
log {
output stdout
format console
level ERROR
}
reverse_proxy gitea:3000
}
- caddy-cloudflare-Dockerfile
FROM caddy:builder-alpine AS builder
RUN xcaddy build --with github.com/caddy-dns/cloudflare
FROM caddy:alpine
COPY --from=builder /usr/bin/caddy /usr/bin/caddy