Caddy是使用Go语言开发的现代化Web服务器,在GitHub上已经收获了惊人的56K星标。
作为Nginx的新生代替代者,它究竟有什么过人之处?让我们带着实际案例一探究竟。

最亮眼的特色:全自动HTTPS
—
还在为配置SSL证书头疼吗?Caddy最令人惊艳的就是全自动HTTPS功能:
- 自动申请Let’s Encrypt证书
- 到期自动续期,永不担心证书过期
- HTTP自动跳转HTTPS
- 零配置,开箱即用
- 支持多域名自动配置
也就是你再也不用手动申请证书、配置nginx、定期更新…一切都是自动的!
超简单的配置方式
—
1. 基础静态网站
example.com {
root * /var/www/html
file_server
encode gzip
}
2. 单页应用(SPA)部署
spa.example.com {
root * /var/www/spa
encode gzip
try_files {path} /index.html
file_server
}
3. 多域名配置
site1.com, site2.com {
root * /var/www/{host}
file_server
}
4. PHP网站
php.example.com {
root * /var/www/php
php_fastcgi localhost:9000
file_server
}
5. 反向代理配置
api.example.com {
reverse_proxy /v1/* localhost:8080
reverse_proxy /v2/* localhost:8081
reverse_proxy /admin/* localhost:3000
}
6. WebSocket支持
ws.example.com {
reverse_proxy /ws/* localhost:8080 {
transport http {
versions h2c 2
}
}
}
实用场景详解
—
1. 微服务架构
example.com {
# API网关
reverse_proxy /api/users/* users-service:8080
reverse_proxy /api/orders/* orders-service:8081
reverse_proxy /api/products/* products-service:8082
# 前端应用
reverse_proxy /* frontend:3000
# 监控面板
handle /metrics {
basicauth {
admin JDJhJDEwJC4uLg
}
reverse_proxy prometheus:9090
}
}
2. 开发环境配置
localhost {
# 前端热重载
reverse_proxy /sockjs-node/* localhost:3000
# API代理
reverse_proxy /api/* localhost:8080
# 静态资源
root * /path/to/assets
file_server {
browse # 开启目录浏览
}
# 自动刷新
watch # 监听文件变化
}
3. 负载均衡
lb.example.com {
reverse_proxy /* {
to backend-1:80 backend-2:80 backend-3:80
lb_policy round_robin
health_check /health
fail_duration 10s
}
}
4. CORS配置
api.example.com {
header {
Access-Control-Allow-Origin *
Access-Control-Allow-Methods "GET, POST, OPTIONS"
Access-Control-Allow-Headers "Content-Type"
}
reverse_proxy localhost:8080
}
5. 缓存控制
static.example.com {
root * /var/www/static
file_server
header /* {
Cache-Control "public, max-age=31536000"
# 一年缓存
}
header /dynamic/* {
Cache-Control "no-cache"
# 动态内容不缓存
}
}
高级特性展示
—
1. 动态DNS配置
{
email admin@example.com
dynamic example.com {
dial_timeout 10s
update_interval 10m
}
}
2. 日志配置
example.com {
log {
output file /var/log/access.log {
roll_size 10mb
roll_keep 5
}
format json
level INFO
}
}
3. 流量控制
rate-limit.example.com {
rate_limit {
zone dynamic_zone {
key {remote_host}
events 10
window 10s
}
}
}
实现一个完整的生产环境配置
—
{
email admin@example.com
acme_dns cloudflare {env.CF_API_TOKEN}
}
(common) {
encode gzip
header /* {
Strict-Transport-Security "max-age=31536000;"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
Referrer-Policy "strict-origin-when-cross-origin"
}
log {
output file /var/log/caddy/{host}.log
format json
}
}
example.com {
import common
# 静态资源
handle /static/* {
root * /var/www/static
file_server {
browse
}
header Cache-Control "public, max-age=31536000"
}
# API服务
handle /api/* {
reverse_proxy api-service:8080 {
health_check /health
fail_duration 5s
buffer_requests
flush_interval 100ms
}
}
# WebSocket
handle /ws/* {
reverse_proxy ws-service:8081 {
transport http {
versions h2c 2
}
}
}
# 主应用
handle /* {
reverse_proxy frontend:3000
}
}
# 管理后台
admin.example.com {
import common
basicauth /* {
admin {env.ADMIN_PASSWORD_HASH}
}
reverse_proxy admin-service:3001
}
# 监控服务
monitor.example.com {
import common
basicauth /* {
admin {env.MONITOR_PASSWORD_HASH}
}
handle /metrics {
reverse_proxy prometheus:9090
}
handle /logs {
reverse_proxy grafana:3000
}
}
快速上手指南
—
- 安装:
# Ubuntu/Debian
sudo apt install caddy
# Mac
brew install caddy
# Docker
docker pull caddy
- 启动服务:
caddy run --config Caddyfile
- 查看状态:
curl localhost:2019/config/
性能建议
—
- 开启压缩:
encode gzip
- 合理设置缓存:
header {
Cache-Control "public, max-age=31536000"
}
- 启用HTTP/2:
protocols h1 h2 h2c
写在最后
—
Caddy的出现让Web服务器的配置变得前所未有的简单。它的自动HTTPS、简洁的配置语法和丰富的功能,让很多开发者爱不释手。虽然在某些极限性能场景下可能还比不上Nginx,但对于大多数中小型项目来说,Caddy已经足够优秀!
如果你正在寻找一个现代化的、配置简单的Web服务器,强烈建议你试试Caddy。相信它简洁优雅的设计理念一定会让你眼前一亮!
原创文章,作者:北单实体店,如若转载,请注明出处:https://www.beidanyezhu.com/a/348.html