在部署网站的时候,想要把自己的网站由http变成https加密通信,以提高安全性。
其中少不了的步骤便是去申请一个SSL/TLS证书,虽然腾讯云等云服务厂商提供免费的证书,但是有效期只有90天,抠搜腾讯最近还把有效期减到了60天。
申请好后,还要把证书下载下来,部署到NGINX,APACHE等web服务器,甚是麻烦。
有没有这样一个服务器,可以直接一步到位吗?既然都这么问了,答案肯定是有的!
caddy,一款可以自动申请证书,自动将你的网站变为https的web服务器
什么是 Caddy?
Caddy 是一个开源的现代 Web 服务器,主要特点是:
自动获取和续签 HTTPS 证书(Let's Encrypt)
简单好用的配置(支持 Caddyfile 和 JSON)
内置反向代理、负载均衡、文件托管、重定向等功能
默认安全设计(HTTP/2、TLS 1.3、OCSP Stapling 等全开)
原生支持模块化(可以按需扩展)
Caddy 的常见应用场景
快速搭建 HTTPS 网站
做反向代理,转发到后端服务(比如 Node.js、Django、Flask)
自动处理 TLS 证书,无需手动申请
简单部署静态文件网站
内网穿透、API 网关、负载均衡等
caddy使用
1. 静态网站托管
example.com {
root * /var/www/html
file_server
}
root * /var/www/html
:设置站点根目录file_server
:启用文件服务器(自动列目录、返回静态文件)
2. 反向代理(单个/多个后端)
单个后端:
example.com {
reverse_proxy localhost:8000
}
多个后端,负载均衡:
example.com {
reverse_proxy backend1:8000 backend2:8000 backend3:8000
}
支持自动健康检查和负载均衡策略(如随机、最少连接等)
3. 自定义日志输出
{
log {
output file /var/log/caddy/access.log
format json
level INFO
}
}
example.com {
reverse_proxy localhost:8000
}
output file:输出到文件
format json:日志格式(可选
json
或console
)level INFO:日志等级(可选
DEBUG
INFO
WARN
ERROR
)
访问日志(单独开)示例:
example.com {
log {
output file /var/log/caddy/example_access.log
format console
}
reverse_proxy localhost:8000
}
4. 自定义 404 页面
example.com {
root * /var/www/html
file_server
handle_errors {
@404 {
expression {http.error.status_code} == 404
}
rewrite @404 /404.html
file_server
}
}
handle_errors:捕获错误码
rewrite:重写到你的自定义页面(比如
/404.html
)
要在 /var/www/html/
目录下放一个 404.html
文件。
5. HTTP重定向到HTTPS(自动)
其实 Caddy默认就会自动把HTTP跳转到HTTPS,无需额外配置。
但如果你想显式指定:
http://example.com {
redir https://example.com{uri} permanent
}
{uri}
是路径和查询参数,保证跳转时不丢失原请求路径。
6. 添加自定义响应头
example.com {
header {
X-Frame-Options "DENY"
X-Content-Type-Options "nosniff"
Referrer-Policy "no-referrer"
}
reverse_proxy localhost:8000
}
header
可以添加、删除、修改响应头,增强网站安全性。
7. 限速、防爬虫(简单示例)
限速:
example.com {
reverse_proxy localhost:8000
encode gzip
# 简单限速,比如每秒最多响应100个请求
rate_limit {
zone myzone 5s 500
key {remote_ip}
}
}
👉 注意:限速需要使用 caddy-rate-limit
插件,默认没有内置。
8. 自定义超时设置
example.com {
reverse_proxy localhost:8000 {
flush_interval -1
transport http {
read_buffer 4096
write_buffer 4096
read_timeout 10s
write_timeout 10s
keepalive 30s
}
}
}
example.com { reverse_proxy localhost:8000 { flush_interval -1 transport http { read_buffer 4096 write_buffer 4096 read_timeout 10s write_timeout 10s keepalive 30s } } }
配置底层 HTTP 连接超时,更灵活控制反向代理行为。
🔥 小结
docker一键部署
使用docker-compose一键快速部署caddy
version: '3'
services:
caddy:
image: caddy:latest
container_name: caddy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
- ./logs:/var/log/caddy