深色模式
Caddy的使用
简介
Caddy是一个Web服务器,它可以代替Nginx,优点是比Nginx配置方便。
官方文档:Caddy
Caddy可以使用API或Caddyfile的方式来配置,这里只关注Caddyfile方式。
使用Caddy,主要关注3点:
- 静态文件
- 反向代理
- HTTPS(参考:Caddy-自动HTTPS)
Caddyfile
结构
Caddyfile的结构图(来自Caddy官方文档):

Global options block:可选的,全局块Snippet:片段,可复用的代码,比如用于重定向Site block:站点块- 仅有1个站点时,站点块的花括号可以省略,缩进也省略。
- 指定、匹配必须在站点块中。
- 跨站点块的内容,不具有全局效果,也不被站点块继承。
Matcher definition:匹配Option name:选项名Option value:选项值Comment:注释Site address:站点地址Directive:指令Matcher token:匹配语法Argument:参数Subdirective:子指令
地址
有效地址示例:
localhostexample.com:443http://example.comlocalhost:8080127.0.0.1[::1]:2015example.com/foo/**.example.comhttp://
匹配器
匹配器不仅可以通过请求路径匹配,还可以能过请求方法、请求头、请求参数等进行匹配。
占位符
片段
- 片段是可复用的。
- 片段的定义有点像函数,可以有参数。
- 通过
import指令来使用片段。
注释
注释以#开头:
# Comments can start a line
directive # or go at the end环境变量
一种用法是,在Dockercompose.yaml中定义环境变量,然后在Caddyfile中使用。
全局选项
Caddyfile的常见配置
静态站点
example.com
encode zstd gzip
root * /var/www
file_serverSPA站点
example.com
encode zstd gzip
root * /var/www
try_files {path} /index.html
file_server反向代理
example.com
reverse_proxy localhost:5000反向代理的同时也可以提供静态文件:
example.com
root * /var/www
reverse_proxy /api/* localhost:5000
file_server删除www.
前端请求www.example.com自动重定向到example.com:
www.example.com {
redir https://example.com{uri}
}
example.com {
}前端跨域请求
example.com
# CORS
header {
Access-Control-Allow-Origin *
Access-Control-Allow-Methods *
Access-Control-Allow-Headers *
}
@options {
method OPTIONS
}
respond @options 204
reverse_proxy localhost:5000匹配Websocket请求
example.com
@websockets {
header Connection *Upgrade*
header Upgrade websocket
}
reverse_proxy @websockets localhost:6001在Docker中运行Caddy
一般不直接在服务器运行Caddy,而是通过Docker运行Caddy,Dockerfile也很简单:
仅作为网关:
dockerfile
FROM caddy:latest
# Caddyfile
COPY Caddyfile /etc/caddy/Caddyfile提供静态站点:
dockerfile
FROM caddy:latest
# Caddyfile
COPY Caddyfile /etc/caddy/Caddyfile
WORKDIR /var/www/html
# 网站内容
COPY ./dist .