方式1:一行命令快速跑
应用场景
适合本地测试
操作
进入你的静态网站目录(里面有 index.html)
# 直接启动,默认 :2015
caddy file-server
# 指定端口 + 开启目录浏览(没有index.html时列出文件)
caddy file-server --listen :8080 --browse
# 指定网站根目录
caddy file-server --root /var/www/static --listen :8080
访问:http://127.0.0.1:8080
方式2:Caddyfile 配置
应用场景
生产推荐,支持HTTPS
操作
新建 Caddyfile(无后缀)
示例A:本地 http 测试
:8080 {
root * /var/www/static
file_server
}
root *:所有请求的网站根目录file_server:开启静态文件服务,自动识别index.html
示例B:域名公网、自动HTTPS(最常用)
前提:域名解析到服务器IP,80/443端口放行
static.example.com {
root * /var/www/static
file_server
encode gzip zstd # 开启压缩,优化加载速度
}
保存后,Caddy 会自动申请 Let’s Encrypt 证书,直接 https://static.example.com 访问,自动 http 跳转 https
示例C:Vue/React SPA单页应用(路由history模式,必配try_files)
刷新404问题解决方案
spa.example.com {
root * /var/www/spa-dist
file_server
encode gzip zstd
try_files {path} {path}/ /index.html
}
示例D:带目录浏览
:8080 {
root * /var/www/static
file_server browse
}
启动、重载、停止
# 当前目录读取 Caddyfile 前台运行(调试)
caddy run
# 后台启动/重载(修改Caddyfile后用这个,不中断服务)
caddy reload
# 停止
caddy stop
Linux systemd 服务
注意: apt安装自带
sudo systemctl restart caddy
sudo systemctl enable caddy
sudo systemctl status caddy
# 配置文件默认位置 /etc/caddy/Caddyfile
# 网站目录权限:caddy 用户要有读权限
sudo chown -R caddy:caddy /var/www/static
常用补充配置
example.com {
root * /var/www/static
file_server {
precompressed br gzip # 优先返回预压缩好的文件
}
encode gzip zstd
# 缓存静态资源(图片、css、js)
@static_files {
path *.jpg *.png *.gif *.css *.js *.ico *.svg
}
header @static_files Cache-Control "public, max-age=2592000"
}
坑
- 权限:网站目录必须让 caddy 用户可读,否则403
- SPA history模式:不加
try_files,子路由刷新404 - 域名HTTPS失败:检查防火墙、域名解析、80端口是否通(ACME验证需要80)
- Windows 直接用二进制,
caddy run即可,适合本地预览静态页