还在手动配 SSL 证书?这个 75K Star 的 Web 服务器让 HTTPS 自动到起飞

作者:Hey_AI_Coder日期:2026/9/12

摘要: 配置 HTTPS 证书有多痛苦?申请、验证、续期、重启,每一步都可能出错。Caddy 直接把这些全自动化了

服务器部署好了,网站能访问了,但浏览器地址栏显示「不安全」。你需要配 HTTPS,于是开始折腾 Let's Encrypt,申请证书、验证域名、配置 Nginx、重启服务。好不容易搞定了,三个月后证书过期,网站又挂了。

更糟的是,你有十几个站点,每个都要配证书,每个都要续期。某天凌晨三点,运维电话打来:「证书过期了,网站打不开」。

HTTPS 是必须的,但配证书的过程太痛苦了。

Caddy 的思路很简单:既然 HTTPS 是必须的,那就让它默认开启,全自动,不用你操心

Github:

github.com/caddyserver…

一句话说清楚

Caddy 是一个用 Go 语言写的 Web 服务器,75.6K Star,4.9K Fork,Apache-2.0 许可证,支持 HTTP/1.1、HTTP/2、HTTP/3,最大卖点是自动 HTTPS——证书申请、续期、配置全自动化,不用手动干预。

它解决了一个什么问题

传统的 Web 服务器(Nginx、Apache)需要手动配置 HTTPS 证书。这个过程有三个痛点:

1. 配置复杂

申请证书要走 ACME 协议,验证域名所有权,配置 Web 服务器响应验证请求,把证书路径写进配置文件。每一步都可能出错,出错了就卡住。

2. 续期麻烦

Let's Encrypt 的证书有效期只有 90 天,你需要配置自动续期脚本,确保它真的在跑,确保续期后能正确加载新证书。很多人续期脚本配错了,自己都不知道,直到证书过期网站挂了。

3. 多站点管理混乱

一个服务器跑多个站点,每个站点都要配证书。证书路径、过期时间、续期任务,管理起来像一团乱麻。

Caddy 的解决方案是:让 Web 服务器自己处理证书

你只需要告诉 Caddy 你要服务哪个域名,它会自动:

  • 申请证书(通过 Let's Encrypt 或 ZeroSSL)
  • 验证域名所有权
  • 安装证书
  • 配置 HTTPS
  • 自动续期

你什么都不用管,证书的事情 Caddy 全包了。

打个比方:传统 Web 服务器像手动挡汽车,你需要自己换挡、踩离合。Caddy 像自动挡,你只管踩油门,剩下的交给车。

核心功能

1. 自动 HTTPS

这是 Caddy 的核心卖点。配置里写一个域名,Caddy 自动搞定证书。支持 Let's Encrypt 和 ZeroSSL 两个证书颁发机构,还能配置本地 CA 给内网域名用。

2. 多协议支持

默认支持 HTTP/1.1、HTTP/2、HTTP/3。HTTP/3 基于 QUIC,比 HTTP/2 更快,但传统服务器配置起来很麻烦,Caddy 默认就支持。

3. 灵活的配置方式

支持 Caddyfile(简单的文本配置格式)和 JSON(原生配置格式)。Caddyfile 像这样:

1example.com {
2    root * /var/www/html
3    file_server
4}
5

两行搞定一个静态网站。JSON 配置更强大,支持热更新,改了配置不用重启。

4. 热更新配置

通过 API 修改配置,不用重启服务器。对于生产环境来说,这意味着零停机时间。

5. 高度可扩展

模块化架构,可以添加各种功能:反向代理、负载均衡、请求过滤、日志记录。核心保持精简,需要什么加什么。

6. 跨平台

Go 语言写的,编译一次到处跑。Linux、macOS、Windows 都支持,没有外部依赖(连 libc 都不需要)。

7. 静态链接

编译出来是一个单独的二进制文件,拷贝到服务器就能用,不需要安装依赖。

技术架构

Caddy 用 Go 语言写成,这是一个很有意思的选择。

Go 的优势在于:

  • 编译成静态二进制:不需要运行时依赖,部署简单
  • 内存安全:有垃圾回收,但性能接近 C++
  • 跨平台:一次编译到处跑
  • 并发支持好:goroutine 处理高并发很轻松

架构上,Caddy 是一个模块化平台。核心只负责加载配置和管理模块,所有实际功能都由模块提供:

  • tls 模块:管理证书和 TLS 握手
  • http 模块:处理 HTTP 请求
  • 其他模块:反向代理、文件服务器、日志等

这种设计让 Caddy 非常灵活。你可以只编译需要的模块,保持二进制文件精简。

技术选型上,Caddy 选择了一个大胆的策略:用 Go 重写整个 Web 服务器,而不是在现有服务器上加功能。这保证了架构的纯净,但也意味着需要从头实现很多功能。

事实证明这个策略是正确的。75.6K Star 和数万亿次 HTTPS 请求的验证,说明 Go 写的 Web 服务器完全能胜任生产环境。

同类项目对比

Web 服务器领域有几个老牌选手:

特性CaddyNginxApache
语言GoCC
自动 HTTPS
配置方式Caddyfile/JSON配置文件.htaccess
HTTP/3默认支持需要模块不支持
热更新reloadreload
学习曲线
Star75.6K25K14K

Nginx 是最流行的 Web 服务器,性能极好,配置灵活。但它的 HTTPS 配置需要手动完成,证书续期需要额外脚本。Nginx Plus(商业版)有一些自动化功能,但需要付费。

Apache 是最老牌的 Web 服务器,功能最全,但配置复杂,性能不如 Nginx,HTTPS 同样需要手动配置。

Caddy 的差异化在于:它不是在跟 Nginx 比性能,而是在比体验

Caddy 的性能不如 Nginx(毕竟 Nginx 是 C 写的),但对于大多数场景来说足够了。而且 Caddy 的配置体验远超 Nginx——两行配置搞定一个网站,Nginx 可能要写几十行。

优势与不足

优势:

  1. 自动 HTTPS:零配置实现 HTTPS,这是杀手级功能
  2. 配置简单:Caddyfile 语法直观,两行配置搞定一个网站
  3. HTTP/3 默认支持:不需要额外配置,开箱即用
  4. 热更新:改配置不用重启,生产环境友好
  5. 跨平台:Go 语言编译,到处运行
  6. 社区成熟:75.6K Star,11 年历史,有商业支持

不足:

  1. 性能不如 Nginx:Go 写的,性能比 C 写的 Nginx 差一档
  2. 模块生态不如 Nginx:Nginx 有几十年的模块积累,Caddy 还在追赶
  3. 文档不够完善:部分高级功能需要看源码
  4. 企业采用率不如 Nginx:很多公司已经在用 Nginx,迁移成本高
  5. 配置格式学习成本:JSON 配置虽然强大,但不如 Caddyfile 直观

前景判断

Caddy 目前处于成熟期,功能完善,社区稳定,已经在生产环境验证多年。

适合的场景:

  • 个人博客、小型网站:配置简单,自动 HTTPS 省心
  • 内网服务:本地 CA 自动生成证书
  • 多站点管理:统一的证书管理
  • 快速原型开发:两行配置搞定一个站点

不适合的场景:

  • 极致性能要求:如果每秒请求量极大,Nginx 更合适
  • 已有 Nginx 基础设施:迁移成本可能不值得
  • 需要大量定制模块:Nginx 的模块生态更丰富

被弃用风险: 极低。有组织维护,有商业支持,社区成熟,已经过了「能不能用」的阶段。

推荐态度: 值得用。如果你是新项目,或者受够了手动配证书,Caddy 是最佳选择。如果你已有 Nginx 基础设施,可以考虑在新项目中尝试 Caddy。

Github:

github.com/caddyserver…

写在最后

Caddy 让我看到了一个趋势:开发者体验正在成为核心竞争力

Nginx 性能更好、功能更全、生态更丰富,但 Caddy 靠「自动 HTTPS」和「配置简单」就拿下了 75.6K Star。这说明什么?说明很多开发者愿意用一点性能换更好的体验。

这不是个例。越来越多的开源项目在拼「好不好用」,而不是「能不能用」。Vite 比 Webpack 快,但也比 Webpack 好用;Docker 比虚拟机轻,但也比虚拟机好用。

Caddy 的成功告诉我们:把一件痛苦的事情变简单,本身就是巨大的价值

如果你还在手动配 SSL 证书,试试 Caddy。它可能不会让你的网站变快,但至少让你少操心。

关注

如果这篇文章对你有帮助,关注我。我会持续更新 AI 开源工具、效率工具的深度解读系列,帮你从海量项目中筛选出真正值得用的工具。


还在手动配 SSL 证书?这个 75K Star 的 Web 服务器让 HTTPS 自动到起飞》 是转载文章,点击查看原文


相关推荐


从 Token 到蒸馏:一步步理解大模型如何工作
杨杨杨大侠2026/9/4

本文面向刚开始了解大模型的读者,以本机运行的 Qwen2.5 0.5B 为例,解释 Token、参数、Transformer、训练、蒸馏和量化之间的关系。 先用一句话概括大模型: 大模型使用训练得到的参数,根据已有 Token,反复预测下一个 Token。 1. 一个模型里有什么 模型不只是一个权重文件。完整运行通常需要三部分: 结构配置:规定模型有多少层、每层多宽。 Tokenizer 和词表:负责文字与 Token ID 之间的转换。 参数:训练得到的大量数字,包括权重矩阵、偏置和归一


【AI大模型接入SDK】Deepseek API + Apifox
艾莉丝努力练剑2026/8/27

🎬 个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬 艾莉丝的简介: 文章目录 1 ~> LLM 接入体系总览1.1 两类主流接入方案1.2 工程定位1.3 技术栈映射 2 ~> 云端 API 接入方式(以 DeepSeek 为例)2.1


只面对一张表:KingbaseES 超表如何简化海量时序数据管理
一只牛博2026/8/19

设备数据最麻烦的地方,不是某一天突然写入一批数据,而是每秒都会有新数据进来。温度、压力、振动、电流、流量等指标不断产生,设备数量增加后,数据量几乎只会单向增长。业务页面通常只问两类问题:某台设备最近一小时的曲线,以及一批设备在某个时间段内的统计结果。数据库管理员面对的却是另一组问题:表拆到什么粒度,索引建在哪些表上,旧数据如何清理,新增设备是否需要发布脚本。 传统时序数据库方案经常把这些事情交给应用层。按月份、按设备或按两者组合拆表,确实能把数据分散开,但路由、建表、补索引和归档也随之进入业务代


C++ 模板深度解析:类型模板、非类型模板、特化与分离编译
在路上慢慢走2026/8/6

1. 引言 模板(Template)是 C++ 泛型编程的核心,它允许编写与类型无关的代码,极大地提高了代码的复用性和灵活性。理解模板的完整体系,包括其分类、特化机制以及编译模型,是掌握现代 C++ 高级特性的关键。本文将系统性地介绍模板的两大类别(类型模板与非类型模板)、模板特化(函数模板特化与类模板特化)以及模板分离编译的原理与实践,帮助你构建完整的模板知识框架。 2. 模板的分类 C++ 模板主要分为两大类:类型模板(Type Template)和非类型模板(Non-type Tem


写了三遍 Todo List,我终于搞懂了 React 父子组件到底怎么通信
To_OC2026/7/28

上来就踩了个最经典的坑 我上周写这个 Todo List 的时候,第一版写得特别快,二十分钟就把界面和逻辑堆完了。然后点复选框试了一下 —— 纹丝不动。 控制台没报错,代码看着也没写错,我对着 checked={todo.completed} 这行盯了十分钟,来回改了好几种写法,勾选状态就是不更新。当时我人都懵了,心想难道我学的 React 是假的? 后来随手打印了一下 todo 对象,发现值其实已经变了,但界面就是不刷新。那一刻我突然反应过来:我直接在子组件里改了 props 传过来的对象属性


拼多多笔试真题-多多的审批链(C++/Py/Java /Js/Go)
无限码力2026/7/20

多多的审批链 拼多多技术岗 4月26号笔试 第四题 题目内容 多多的部门中发起审批单有一套审批流程,审批关系可以抽象为一棵以 111 号节点为根的树,共有 nnn 个节点。对于每个 i(2≤i≤n)i(2 \le i \le n)i(2≤i≤n),给定它的直属上级 pip_ipi​,即审批树中存在一条从 pip_ipi​ 到 iii 的边。 对于任意节点 uuu,如果它发起一张审批单,那么审批单只能先提交给它的直属上级,再继续逐级上报到更高层。 现在多多最多可以选择 kkk 个节点作为“关键


图片是 Web 性能监控的重灾区:LCP 和 CLS 到底怎么测、怎么定位到具体那张图
谙忆10242026/7/12

做前端性能这几年,我踩过一个反复出现的坑:本地 Lighthouse 跑出来 95 分,一到线上真实用户那边,投诉页面"卡""跳"的却一堆。后来盯着数据看明白了——问题几乎都出在图片上,而且实验室环境根本复现不出来。 这篇就把"图片相关的 Web 性能怎么测、怎么监控、怎么定位到罪魁祸首那张图"讲清楚。重点是测量和监控这条链路,不是又一篇"图片懒加载十种写法"。 先分清两组概念:实验室数据 vs 真实用户数据 这是很多人一上来就混的地方,先掰开。 实验室数据(Lab):Lighthouse、We


别再只会 if err != nil:Go error 从错误链到工程实战详解
唐青枫2026/7/4

简介 Go 代码里最常见的错误处理大概是这样: result, err := doSomething() if err != nil { return err } 这几行代码不难,真正容易出问题的是后面的选择: 应该新建错误,还是包装原错误? 应该使用 ==,还是 errors.Is? 什么时候需要自定义错误类型? 错误应该在哪一层记录日志? 多个清理操作同时失败,应该返回哪一个错误? 普通错误、panic 和 recover 到底怎么分工? Go 没有把错误处理藏进异常机制,而是把错误当


Java 虚拟线程实战指南:从 Thread API 到 Spring Boot 高并发应用
唐青枫2026/6/26

简介 虚拟线程的英文名是 Virtual Thread,它是 Project Loom 带来的轻量级线程实现。 虚拟线程在 JDK 19、JDK 20 中经历了两轮预览,到了 JDK 21 正式发布。 简单理解: 平台线程:Java 线程长期绑定操作系统线程 虚拟线程:大量 Java 线程由 JVM 调度到少量操作系统线程上 传统 Java 服务经常采用“一请求一线程”的处理方式。 代码很直观,但平台线程数量有限。当大量请求都在等待数据库、HTTP 接口、文件或消息队列时,线程本身会先成为瓶颈


Java Flyway 实战指南:用 SQL 脚本管理数据库版本
唐青枫2026/6/17

简介 Flyway 是一个数据库迁移工具。 它解决的问题和 Liquibase 类似: 数据库结构怎么跟着项目版本一起演进。 不过 Flyway 的风格更简单直接。 它主要通过 SQL 文件管理数据库变更。 比如: V1__create_users_table.sql V2__add_user_email_column.sql V3__create_orders_table.sql V4__insert_init_data.sql 应用启动或命令执行时,Flyway 会检查哪些脚本已经执行过

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读