更适合小型项目和个人开发者的Caddy你有了解过么

对比Nginx有时可能Caddy更好

  • 从 Nginx 到 Caddy:
    • 为什么我要换掉用了这么多年的 Nginx?
    • 那个让我彻底转粉的瞬间
    • 真实案例:一个简单的 API 服务
    • 让我彻底爱上的几个功能
      • 多个域名?随便加
      • 负载均衡?也是一行代码
      • 通配符证书?太简单了
      • WebSocket?默认就支持
    • 开发环境也能用真正的 HTTPS
    • 老实说,Caddy 也不是万能的
    • 5 分钟上手试试
      • 方法一:直接安装
      • 方法二:Docker
      • 第一个配置文件
    • 给你个小挑战

从 Nginx 到 Caddy:

为什么我要换掉用了这么多年的 Nginx?

说实话,我用 Nginx 用了好多年,个人项目、客户网站、生产服务器都在用。一旦摸透了那些配置文件的门道,确实挺好用的,而且超级稳定。

但是几年前我遇到了 Caddy,瞬间被它的简单给震撼了:

  • 就一个可执行文件
  • 配置文件人话能看懂
  • 自动 HTTPS 真的能用!

从那之后,我就再也没部署过 Nginx。

那个让我彻底转粉的瞬间

看看这个完整的、能用于生产环境的反向代理配置:

api.myapp.com {
    reverse_proxy localhost:3000
}

就这样,三行代码!包含了:

  • 自动 HTTPS
  • 自动生成证书
  • HTTP/2 支持

我第一次看到这个配置时简直不敢相信:SSL 配置呢?证书路径呢?各种复杂的参数呢?

答案是:不需要,Caddy 全部自动搞定。

真实案例:一个简单的 API 服务

假设你有个跑在 3000 端口的 API:

import { Hono } from 'hono';

const app = new Hono();

app.get('/api/health', (c) => {
  return c.json({ status: 'ok', timestamp: new Date() });
});

app.post('/api/data', async (c) => {
  const body = await c.req.json();
  return c.json({ received: body });
});

要让它支持 HTTPS、自定义域名,只需要:

  1. 安装 Caddy(一个命令搞定)
  2. 创建配置文件:
api.yourapp.com {
    reverse_proxy localhost:3000
}
  1. 运行 caddy start

完事!你的 API 现在就能通过 https://api.yourapp.com 访问了,而且:

  • Let’s Encrypt 证书自动配置
  • HTTP 自动跳转到 HTTPS
  • 支持 HTTP/2 和 HTTP/3
  • 证书自动续期

让我彻底爱上的几个功能

多个域名?随便加

api.yourapp.com {
    reverse_proxy localhost:3000
}

app.yourapp.com {
    reverse_proxy localhost:3001
}

admin.yourapp.com {
    reverse_proxy localhost:3002
    basicauth {
        admin $2a$14$Zkx19XL...
    }
}

每个域名自动获得独立的 SSL 证书,想给管理后台加个密码验证?一行代码搞定。

负载均衡?也是一行代码

api.yourapp.com {
    reverse_proxy localhost:3000 localhost:3001 localhost:3002 {
        lb_policy round_robin
        health_uri /health
        health_interval 10s
    }
}

自动轮询分发请求,每 10 秒检查服务器健康状态,挂了的自动踢出去。

通配符证书?太简单了

*.yourapp.com {
    reverse_proxy localhost:3000
}

一行代码搞定所有子域名,特别适合 SaaS 应用,每个客户一个子域名。

WebSocket?默认就支持

不需要任何特殊配置,Caddy 自动识别 WebSocket 请求并正确处理。

开发环境也能用真正的 HTTPS

这个功能我特别喜欢!你可以在本地用 .local 域名跑 HTTPS:

  1. 编辑 /etc/hosts
127.0.0.1 api.myapp.local
127.0.0.1 app.myapp.local
  1. 创建本地配置:
api.myapp.local {
    reverse_proxy localhost:3000
}

app.myapp.local {
    reverse_proxy localhost:3001
}
  1. 运行 caddy run --watch

现在你本地开发就有了:

  • 真正的 HTTPS(不是那种浏览器警告的自签名证书)
  • 和生产环境一样的 URL 结构
  • 改配置文件自动重新加载

测试 webhook、OAuth 什么的再也不用担心 HTTPS 问题了。

老实说,Caddy 也不是万能的

什么时候还是得用 Nginx:

  • 需要超级细粒度的控制
  • 每秒处理 10 万+ 请求(虽然 Caddy v2 已经很快了)
  • 团队有很深的 Nginx 经验和自定义模块

但对于我们大部分人来说,Caddy 真的简单太多了。

5 分钟上手试试

方法一:直接安装

# Ubuntu/Debian
sudo apt install caddy

方法二:Docker

FROM caddy:alpine
COPY Caddyfile /etc/caddy/Caddyfile

第一个配置文件

localhost:8080 {
    respond "Hello, Caddy!"
}

运行 caddy run,打开 http://localhost:8080,你就在用 Caddy 了!

给你个小挑战

这周找个最简单的项目试试 Caddy,就一个服务就行。我敢打赌你会惊讶于:

  • 配置有多简单
  • 改东西有多快
  • 再也不用担心 SSL 证书的事

试试吧,我觉得你会和我一样,再也不想回到 Nginx 了。


有时候,最好的工具不是功能最多的,而是让你最省心的。

你可能感兴趣的:(nginx)