HTTP/2 Web 服务器-Caddy
Caddy 是一个支持 HTTP/2 的跨平台 Web 服务器,使用和配置都非常简单。支持 HTTP/2, IPv6, Markdown, WebSockets, FastCGI, 模板等等。采用Go语言开发并在Apache协议下授权使用。
全自动支持HTTP/2协议,无需任何配置
使用 Let's Encrypt 让你的站点全自动变成HTTPS,无需任何配置
合理使用多核多核
支持 HTTP3(QUIC)
完全支持IPv6环境
后端多种负载策略以及健康检测等
对WebSockets有很好的支持
自动把Markdown转成 HTML
对log格式的定义很容易易于部署
Caddy只是一个小小的二进制文件,没有依赖,很好部署。得益于Go的跨平台特性,Caddy很容易的支持了三大主流系统:Windows、Linux、Mac。它是一个灵活、高效的静态文件服务器,也是一个强大的、可伸缩的反向代理。使用它来为您的静态站点提供压缩、模板评估、Markdown呈现等服务。或者将其用作任意数量后端的动态反向代理,包括主动和被动健康检查、负载平衡、断路、缓存等等。
Every site on HTTPS
Caddy is an extensible server platform that uses TLS by default.
Easy configuration with the Caddyfile
Powerful configuration with its native JSON config
Dynamic configuration with the JSON API
Config adapters if you don't like JSON
Automatic HTTPS by default
ZeroSSL and Let's Encrypt for public names
Fully-managed local CA for internal names & IPs
Can coordinate with other Caddy instances in a cluster
Multi-issuer fallback
Stays up when other servers go down due to TLS/OCSP/certificate-related issues
Production-ready after serving trillions of requests and managing millions of TLS certificates
Scales to tens of thousands of sites ... and probably more
HTTP/1.1, HTTP/2, and experimental HTTP/3 support
Highly extensible modular architecture lets Caddy do anything without bloat
Runs anywhere with no external dependencies (not even libc)
Written in Go, a language with higher memory safety guarantees than other servers
Actually fun to use
配置 Caddy
mkdir -p /etc/caddy # 配置文件夹
touch /etc/caddy/Caddyfile
Caddyfile写入以下内容,格式还是比较简单的
example.com:80
gzip
log /var/log/caddy/access.log
root /var/www
tls tls@freeoa.net
首先第一行必须是网站的地址
第2行的 gzip 是一个指令,表示打开 gzip 压缩功能,这样网站在传输网页时降低流量
第3行的 log 指令会为网站开启 log 功能,log 后的参数是log 文件的存放位置
第4行的 root 是指定网站的根目录
第5行的 tls 指令告诉 caddy 为网站开启 https 并自动申请证书,后面的 email 参数是告知 CA 申请人的邮箱。caddy 会默认使用 let's encrypt 申请证书并续约。 tls 也可以使用路径给出的证书 tls /etc/ssl/cert.pem /etc/ssl/key.pem
如何设置多站点访问
example.com:80 {
gzip
log /var/log/caddy/access.log
root /var/www
tls /etc/ssl/cert.pem /etc/ssl/key.pem
}
example2.com:3000{
gzip
log /var/log/caddy/example2/access.log
root /var/www/example2
tls /etc/ssl/example2/cert.pem /etc/ssl/example2/key.pem
}
基本的 caddy 配置就这些,详细的内容可以去官网上看文档学习。
反向代理
http://www.example.com {
## HTTP 代理配置
### 此时访问 example.com,实际访问的是 127.0.0.1:8080/app/ 的内容
proxy / 127.0.0.1:8080/app/
## WebSocket 代理配置
### 客户端请求的 wss://example.com/app/websocket, 实际为 wss://127.0.0.1:8080/app/websocket
proxy /app/websocket 127.0.0.1:8080 {
websocket
}
}
负载均衡简单配置
proxy / web1.local:81 web2.local:82 web3.local:83 {
policy round_robin
}
用反向代理命令proxy 将请求循环转发到 81、82、83 三个后端服务,通过 policy 命令控制策略为 round_robin,以循环方式选择后端服务。
已守护进程(daemon)的方式启动
有3种方法可供参考
nohup caddy &
下载 hook.service 插件
systemd
import 指令除了支持引用配置片段以外,还支持引用外部文件,同时支持通配符,有了这个命令以后就可以方便地将配置文件进行模块化处理:
# 引用外部的 /etc/caddy/*.caddy
import /etc/caddy/*.caddy
关于这个 “地址” 接受多种格式,以下都为合法的地址格式:
localhost
example.com
:443
http://example.com
localhost:8080
127.0.0.1
[::1]:2015
example.com/foo/*
*.example.com
http://
最新版本:2.3
项目主页:https://github.com/caddyserver/caddy