首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 Caddy 替代 Nginx:下一代 Web Server 的生产实践指南

用 Caddy 替代 Nginx:下一代 Web Server 的生产实践指南

作者头像
井九
发布2026-05-12 08:19:04
发布2026-05-12 08:19:04
1190
举报
文章被收录于专栏:四楼没电梯四楼没电梯

“Nginx 很强,但越来越多人开始把生产环境切到 Caddy。”

过去十几年,Nginx 几乎是 Web Server、反向代理、静态资源服务器的标准答案。 但随着 HTTPS 普及、容器化部署、自动化运维和微服务的发展,Nginx 的一些“老派设计”开始暴露问题:

  • HTTPS 配置复杂
  • 证书续期依赖额外工具
  • 配置语法不直观
  • 热更新容易踩坑
  • Docker 场景配置繁琐

而这时候,一个新选手开始崛起:

Caddy

它被很多开发者称为:

“现代化版 Nginx”

在这里插入图片描述
在这里插入图片描述

为什么越来越多人开始用 Caddy?

一句话总结:

Caddy 默认就做对了很多事。

它不像传统 Web Server:

  • 默认 HTTP
  • 手动配 HTTPS
  • 自己处理证书
  • 自己写 TLS 配置
  • 自己做跳转
  • 自己搞续期

而 Caddy:

  • 默认 HTTPS
  • 自动申请 SSL
  • 自动续期
  • 自动 HTTP → HTTPS
  • 配置极简
  • 热更新无感知

你甚至只需要:

代码语言:javascript
复制
example.com {
    reverse_proxy localhost:8080
}

就已经:

  • 自动启用 HTTPS
  • 自动申请 Let’s Encrypt
  • 自动续期
  • 自动反代

这在 Nginx 里,通常需要几十行配置。


Nginx 的痛点

先看看传统 Nginx 配置:

代码语言:javascript
复制
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

接下来你还得:

  • 配 HTTPS
  • 配 certbot
  • 配定时续期
  • 配 TLS 参数
  • 配 HTTP 跳转
  • reload nginx

真正生产环境往往会变成:

代码语言:javascript
复制
server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate ...
    ssl_certificate_key ...

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ...

    location / {
        proxy_pass ...
    }
}

配置越来越长。

尤其:

  • 新手容易踩坑
  • HTTPS 易配置错误
  • TLS 安全性依赖经验
  • Docker 下证书管理麻烦

Caddy 的核心优势


1. 自动 HTTPS(真正的杀手级功能)

这是 Caddy 最大的核心竞争力。

只要域名解析正确:

代码语言:javascript
复制
example.com {
    reverse_proxy localhost:8080
}

启动后:

  • 自动申请证书
  • 自动配置 TLS
  • 自动续期
  • 自动 OCSP Stapling
  • 自动 HTTPS 跳转

你甚至不需要知道:

  • certbot
  • acme.sh
  • Let’s Encrypt API

对个人开发者、小团队来说:

这几乎直接减少了 80% 运维成本。


2. 配置极其简单

Nginx:

代码语言:javascript
复制
location /api/ {
    proxy_pass http://127.0.0.1:9000;
}

Caddy:

代码语言:javascript
复制
handle /api/* {
    reverse_proxy localhost:9000
}

更加接近自然语言。


3. 热更新更优雅

Nginx:

代码语言:javascript
复制
nginx -s reload

如果配置错误:

  • reload 失败
  • 服务异常
  • 有时连接中断

而 Caddy:

代码语言:javascript
复制
caddy reload

具备:

  • 配置校验
  • 平滑热更新
  • 零停机 reload

对高并发系统非常友好。


4. 原生支持 HTTP/3

现在很多人还在手动给 Nginx 编译 QUIC 模块。

但 Caddy:

默认支持 HTTP/3。

这是现代协议栈的重要优势。


5. Docker 场景极度舒服

Nginx Docker 常见问题:

  • 证书目录挂载
  • certbot 容器
  • 自动续期
  • reload 联动

而 Caddy:

代码语言:javascript
复制
services:
  caddy:
    image: caddy
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data

结束。

证书自动存储。

不用再维护 certbot。


实战:从 Nginx 迁移到 Caddy


一、安装 Caddy

Linux:

代码语言:javascript
复制
curl -1sLf \
'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
| sudo gpg --dearmor \
-o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

curl -1sLf \
'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
| sudo tee /etc/apt/sources.list.d/caddy-stable.list

sudo apt update
sudo apt install caddy

官方文档:

Caddy 官方网站


二、最简单反向代理

原 Nginx:

代码语言:javascript
复制
server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

改成 Caddy:

代码语言:javascript
复制
api.example.com {
    reverse_proxy localhost:8080
}

就结束了。


三、静态网站托管

代码语言:javascript
复制
example.com {
    root * /var/www/html
    file_server
}

支持:

  • gzip
  • range
  • cache
  • https

默认就很好。


四、SPA 前端(Vue/React)

以前 Nginx:

代码语言:javascript
复制
try_files $uri /index.html;

Caddy:

代码语言:javascript
复制
example.com {
    root * /app/dist

    try_files {path} /index.html

    file_server
}

非常直观。


五、WebSocket

Nginx:

代码语言:javascript
复制
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

Caddy:

根本不用写。

自动支持。


六、多服务网关

代码语言:javascript
复制
example.com {

    handle /api/* {
        reverse_proxy localhost:8080
    }

    handle /admin/* {
        reverse_proxy localhost:9000
    }

    handle {
        root * /web
        file_server
    }
}

这已经很像 API Gateway 了。


七、Basic Auth

代码语言:javascript
复制
admin.example.com {

    basicauth {
        admin $2a$14$xxxxxxxx
    }

    reverse_proxy localhost:8080
}

生成密码:

代码语言:javascript
复制
caddy hash-password

八、自动 HTTPS 的原理

Caddy 内部实现了:

Let’s Encrypt

ACME 协议客户端。

流程:

代码语言:javascript
复制
域名解析
   ↓
ACME 验证
   ↓
自动签发证书
   ↓
自动安装
   ↓
自动续期

整个过程完全自动化。


Caddy 的不足

当然,Caddy 也不是完美的。


1. 生态不如 Nginx

Nginx 十几年积累:

  • Lua
  • OpenResty
  • 大量模块
  • 社区教程

Caddy 生态仍小很多。


2. 高级场景资料较少

比如:

  • 四层代理
  • 高级限流
  • WAF
  • Lua 动态逻辑

Nginx 资料压倒性更多。


3. 企业老系统迁移成本

很多公司:

  • 运维 SOP 基于 Nginx
  • 日志分析基于 Nginx
  • 监控基于 Nginx
  • 配置模板基于 Nginx

迁移需要成本。


性能对比

很多人误以为:

“Go 写的 Web Server 会比 C 差。”

实际上:

Caddy 性能非常强。

在多数业务场景:

  • CPU 差距很小
  • TLS 性能甚至更强
  • HTTP/2 / HTTP/3 表现优秀

真正瓶颈通常不在 Web Server。

而在:

  • 数据库
  • 业务逻辑
  • IO
  • 缓存

哪些场景特别适合 Caddy?


个人开发者

最推荐。

因为:

  • 不懂 HTTPS 也能安全上线
  • 不需要运维经验
  • 配置简单

Docker / K8S

非常舒服。

尤其:

  • 自动证书
  • 自动 reload
  • 容器友好

微服务网关

Caddy 做:

  • API Gateway
  • Reverse Proxy
  • Internal Gateway

体验很好。


SaaS 系统

尤其:

  • 多租户域名
  • 自动 HTTPS
  • 动态站点

Caddy 非常强。


哪些场景仍建议 Nginx?


超复杂企业架构

例如:

  • Lua 动态逻辑
  • OpenResty
  • WAF 深度定制
  • 复杂流量治理

Nginx 仍更成熟。


极端性能优化

某些:

  • CDN
  • 超高并发边缘节点

仍可能优先 Nginx。


一个很现实的问题

很多人用了 Caddy 后最大的感受是:

“终于不用折腾 HTTPS 了。”

以前:

  • 证书过期
  • certbot 崩了
  • reload 出问题
  • TLS 配错

都很常见。

现在:

Caddy 默认帮你搞定。

这其实是它真正改变行业的地方:

Web Server 开始“默认安全”。


推荐架构

个人/中小团队非常推荐:

代码语言:javascript
复制
Internet
    ↓
Caddy
    ↓
FastAPI / Node.js / Go

或者:

代码语言:javascript
复制
Cloudflare
    ↓
Caddy
    ↓
Docker Services

非常现代化。


总结

如果一句话总结:

场景

推荐

新项目

Caddy

小团队

Caddy

Docker 化

Caddy

自动 HTTPS

Caddy

超复杂企业系统

Nginx

OpenResty/Lua

Nginx


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Caddy
  • 为什么越来越多人开始用 Caddy?
  • Nginx 的痛点
  • Caddy 的核心优势
    • 1. 自动 HTTPS(真正的杀手级功能)
    • 2. 配置极其简单
    • 3. 热更新更优雅
    • 4. 原生支持 HTTP/3
    • 5. Docker 场景极度舒服
  • 实战:从 Nginx 迁移到 Caddy
  • 一、安装 Caddy
  • 二、最简单反向代理
  • 三、静态网站托管
  • 四、SPA 前端(Vue/React)
  • 五、WebSocket
  • 六、多服务网关
  • 七、Basic Auth
  • 八、自动 HTTPS 的原理
  • Let’s Encrypt
  • Caddy 的不足
    • 1. 生态不如 Nginx
    • 2. 高级场景资料较少
    • 3. 企业老系统迁移成本
  • 性能对比
  • 哪些场景特别适合 Caddy?
    • 个人开发者
    • Docker / K8S
    • 微服务网关
    • SaaS 系统
  • 哪些场景仍建议 Nginx?
    • 超复杂企业架构
    • 极端性能优化
  • 一个很现实的问题
  • 推荐架构
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档