深色模式
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
:子指令
地址
有效地址示例:
localhost
example.com
:443
http://example.com
localhost:8080
127.0.0.1
[::1]:2015
example.com/foo/*
*.example.com
http://
匹配器
匹配器不仅可以通过请求路径匹配,还可以能过请求方法、请求头、请求参数等进行匹配。
占位符
片段
- 片段是可复用的。
- 片段的定义有点像函数,可以有参数。
- 通过
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_server
SPA站点
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 .