百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

为什么越来越多的人放弃 Nginx,选择 Caddy?

off999 2025-02-18 12:46 19 浏览 0 评论

1. 什么是 Caddy?

Caddy 是一款现代化的 Web 服务器,专为简化开发者和运维人员的工作流程而设计。它最大的特点是自动化和易用性,尤其是内置的自动 HTTPS 功能,使得部署安全的 Web 服务变得前所未有的简单。

相比于传统的 Web 服务器(如 Nginx、Apache),Caddy 的目标是通过更简洁的配置、更智能的功能来减少人为出错的可能性,并提升部署效率。

支持 API 和配置文件两种方式:

您可以在同一台服务器上同时使用 API 和配置文件,但我们不建议这样做:最好有一个真相来源。

API

配置文件

使用 HTTP 请求进行配置更改

使用 shell 命令进行配置更改

易于扩展

难以扩展

难以手工管理

易于手工管理

Caddyfile的结构


要点

  • ? 一个可选的 全局选项块 可以是文件中第一个内容。
  • ? 代码段 或 命名路由 可以选择性地出现在下一个位置。
  • ? 否则,Caddyfile 的第一行始终是将要服务的站点的 地址。
  • ? 所有 指令 和 匹配器 必须放在站点块中。站点块之间没有全局范围或继承关系。
  • ? 如果只有一个站点块,则其花括号 { } 是可选的。

Caddyfile 由至少一个或多个站点块组成,这些站点块始终以一个或多个站点的地址开头。出现在地址之前的任何指令都会让解析器感到困惑。


2. Caddy 的主要功能亮点

自动 HTTPS

Caddy 是第一款默认支持自动 HTTPS 的 Web 服务器。通过内置与 Let's Encrypt 的集成,Caddy 能够自动生成、管理和续订 SSL 证书。用户无需手动设置复杂的证书路径或担心证书过期问题。

示例: 在配置文件中,仅需指定域名:

example.com  
file_server  

Caddy 会自动为 example.com 配置 HTTPS,无需额外操作。

简单配置文件

Caddy 使用直观易懂的配置语法,让初学者也能快速上手。相比 Nginx 的复杂配置,Caddy 的配置文件更短小精悍。

示例对比: 在 Nginx 中配置一个静态文件服务:

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    location / {
        try_files $uri $uri/ =404;
    }
}

在 Caddy 中实现相同功能,仅需:

example.com  
root * /var/www/html  
file_server  

内置反向代理

Caddy 内置反向代理功能,支持负载均衡、健康检查和动态路由,非常适合现代微服务架构。用户可以轻松配置 Caddy 作为网关,无需安装额外插件。

示例

example.com {  
    reverse_proxy /api/* 127.0.0.1:8080  
}  

通过 API 方式配置更为简单:

caddy reverse-proxy \
 --from example.com \
 --to https://127.0.0.1:9000 \
 --change-host-header

丰富的插件支持

Caddy 提供模块化架构,允许开发者轻松扩展其功能。官方和社区维护了许多插件,如文件缓存、认证管理和日志分析工具。

支持多种协议

除了 HTTP 和 HTTPS,Caddy 还支持 gRPC、HTTP/2 和 HTTP/3 等现代协议,提供更高效的传输性能。

高效性能和轻量化设计

Caddy 使用 Go 语言编写,启动速度快,占用资源少,特别适合云原生和容器化部署场景。


3. Caddy 与 Nginx 的对比

特性

Caddy

Nginx

易用性

配置简单,几乎零门槛,自动处理 HTTPS

配置灵活,但语法复杂,学习曲线较陡

HTTPS 支持

默认自动 HTTPS,免去证书管理

需手动配置证书和续订

插件扩展

模块化设计,支持动态加载插件

插件需编译到核心模块,使用不够灵活

性能表现

性能优异,适合现代协议

长期优化的高性能,适合高并发场景

社区生态

社区逐渐壮大,官方维护活跃

历史悠久,社区广泛,生态成熟


4. 使用 Caddy 的简单教程

安装 Caddy

安装 Caddy 十分简单,以下是常见的安装方法:

  • ? 通过包管理器(适用于 Linux 系统):
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
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 文件

Caddy 的核心配置文件通常命名为 Caddyfile。以下是一个基础示例:

example.com {  
    root * /var/www/html  
    file_server  
}  

启动和测试

通过以下命令启动 Caddy:

caddy run  

访问 http://example.com,您即可看到网站成功运行!


5. 哪些场景适合使用 Caddy?

  • ? 中小型项目快速部署:无需深入研究复杂配置文件,即可实现高质量服务。
  • ? HTTPS 必备场景:自动化证书管理,省时省力。
  • ? 现代微服务架构:内置反向代理,支持多协议和动态负载均衡。
  • ? 个人开发者和小团队:对技术门槛要求低,能快速实现生产级服务。

相比之下,如果您的项目需要极高的性能优化或者复杂的企业级流量管理,Nginx 可能是更合适的选择。


如果您的项目不需要高并发和复杂流量管理,Caddy 足以替代 Nginx 并提供极好的使用体验;但在更复杂的生产环境中,Nginx 仍然是不可替代的强大工具。

文档:https://caddyserver.com.cn/docs

Github:https://github.com/caddyserver/caddy

相关推荐

Python钩子函数实现事件驱动系统(created钩子函数)

钩子函数(HookFunction)是现代软件开发中一个重要的设计模式,它允许开发者在特定事件发生时自动执行预定义的代码。在Python生态系统中,钩子函数广泛应用于框架开发、插件系统、事件处理和中...

Python函数(python函数题库及答案)

定义和基本内容def函数名(传入参数):函数体return返回值注意:参数、返回值如果不需要,可以省略。函数必须先定义后使用。参数之间使用逗号进行分割,传入的时候,按照顺序传入...

Python技能:Pathlib面向对象操作路径,比os.path更现代!

在Python编程中,文件和目录的操作是日常中不可或缺的一部分。虽然,这么久以来,钢铁老豆也还是习惯性地使用os、shutil模块的函数式API,这两个模块虽然功能强大,但在某些情况下还是显得笨重,不...

使用Python实现智能物流系统优化与路径规划

阅读文章前辛苦您点下“关注”,方便讨论和分享,为了回馈您的支持,我将每日更新优质内容。在现代物流系统中,优化运输路径和提高配送效率是至关重要的。本文将介绍如何使用Python实现智能物流系统的优化与路...

Python if 语句的系统化学习路径(python里的if语句案例)

以下是针对Pythonif语句的系统化学习路径,从零基础到灵活应用分为4个阶段,包含具体练习项目和避坑指南:一、基础认知阶段(1-2天)目标:理解条件判断的逻辑本质核心语法结构if条件:...

[Python] FastAPI基础:Path路径参数用法解析与实例

查询query参数(上一篇)路径path参数(本篇)请求体body参数(下一篇)请求头header参数本篇项目目录结构:1.路径参数路径参数是URL地址的一部分,是必填的。路径参...

Python小案例55- os模块执行文件路径

在Python中,我们可以使用os模块来执行文件路径操作。os模块提供了许多函数,用于处理文件和目录路径。获取当前工作目录(CurrentWorkingDirectory,CWD):使用os....

python:os.path - 常用路径操作模块

应该是所有程序都需要用到的路径操作,不废话,直接开始以下是常用总结,当你想做路径相关时,首先应该想到的是这个模块,并知道这个模块有哪些主要功能,获取、分割、拼接、判断、获取文件属性。1、路径获取2、路...

原来如此:Python居然有6种模块路径搜索方式

点赞、收藏、加关注,下次找我不迷路当我们使用import语句导入模块时,Python是怎么找到这些模块的呢?今天我就带大家深入了解Python的6种模块路径搜索方式。一、Python模块...

每天10分钟,python进阶(25)(python进阶视频)

首先明确学习目标,今天的目标是继续python中实例开发项目--飞机大战今天任务进行面向对象版的飞机大战开发--游戏代码整编目标:完善整串代码,提供完整游戏代码历时25天,首先要看成品,坚持才有收获i...

python 打地鼠小游戏(打地鼠python程序设计说明)

给大家分享一段AI自动生成的代码(在这个游戏中,玩家需要在有限时间内打中尽可能多的出现在地图上的地鼠),由于我现在用的这个电脑没有安装sublime或pycharm等工具,所以还没有测试,有兴趣的朋友...

python线程之十:线程 threading 最终总结

小伙伴们,到今天threading模块彻底讲完。现在全面总结threading模块1、threading模块有自己的方法详细点击【threading模块的方法】threading模块:较低级...

Python信号处理实战:使用signal模块响应系统事件

信号是操作系统用来通知进程发生了某个事件的一种异步通信方式。在Python中,标准库的signal模块提供了处理这些系统信号的机制。信号通常由外部事件触发,例如用户按下Ctrl+C、子进程终止或系统资...

Python多线程:让程序 “多线作战” 的秘密武器

一、什么是多线程?在日常生活中,我们可以一边听音乐一边浏览新闻,这就是“多任务处理”。在Python编程里,多线程同样允许程序同时执行多个任务,从而提升程序的执行效率和响应速度。不过,Python...

用python写游戏之200行代码写个数字华容道

今天来分析一个益智游戏,数字华容道。当初对这个游戏颇有印象还是在最强大脑节目上面,何猷君以几十秒就完成了这个游戏。前几天写2048的时候,又想起了这个游戏,想着来研究一下。游戏玩法用尽量少的步数,尽量...

取消回复欢迎 发表评论: