一个比 Nginx 还简单的 Web 服务器

企业级的 Web 服务器非常多,Nginx、Tomcat、Apache、IIS、FastAPI、Flask 等。今天松哥再给大家介绍一个开源的 Web 服务器,这款服务器具备自动 HTTPS 功能和高度可配置性,它的名字是:Caddy。

Caddy 是一个 Go 编写的 Web 服务器,类似于 Nginx,Caddy 提供了更加强大的功能,随着 v2 版本发布,Caddy 已经可以作为中小型站点 Web 服务器的另一个选择。

相较于 Nginx 来说使用 Caddy 的优势如下:

  1. 自动HTTPS:Caddy 的自动 TLS 功能,让 HTTPS 变得触手可及,无需额外配置。

  2. 配置简便性:Caddy 提供了两种配置方式——简洁的 Caddyfile 和功能丰富的 JSON 格式。

  3. 配置灵活性:通过 JSON API,Caddy 允许实时更新配置,提供了极大的灵活性。

  4. 代理能力:Caddy 的 HTTP 反向代理功能强大而灵活。

  5. 静态资源托管:作为静态文件服务器,Caddy 已经证明了其在生产环境中的可靠性和扩展性。

  6. 全平台支持:Caddy 支持 Linux、Windows、macOS 等多种操作系统。

  7. 高性能:Go 语言的开发背景,保证了 Caddy 的高效性能和内存安全。

Caddy 轻量简单,对新手也比较友好,我们一起来看下 Caddy 的用法吧。

一 安装

可以直接使用 Linux 里边的包管理工具来安装 Caddy。

例如,在 Ubuntu 中我们可以使用如下命令安装:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
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

如果是 Redhat 或者是 CentOS 的话,则可以使用如下命令安装:

yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy

当然,这玩意也提供了 Docker 镜像,也可以使用 Docker 安装。

二 配置

Caddy 的配置文件可以是 JSON 格式或 Caddyfile 格式。

Caddyfile 是一种更加简洁的文本配置格式,适合快速配置常见的用例。

下面我将重点介绍 Caddyfile 的配置方式。

2.1 Caddyfile 基础语法

Caddyfile 使用简单的文本格式,每一行可以包含一个服务器块,其中包含域名、TLS 设置和其他指令。服务器块以域名开始,后面跟着一系列的指令。

服务器块

一个典型的 Caddyfile 服务器块如下所示:

javaboy.org {# 配置指令
}
常见指令

这里有一些常用的指令:

  • root: 指定网站的根目录。

  • tls: 用于自动获取和管理 TLS/SSL 证书。

  • proxy: 用于配置反向代理。

  • rewrite: 用于重写 URL。

  • gzip: 开启 GZIP 压缩。

  • auth: 配置基本的身份验证。

  • cache: 配置缓存设置。

  • log: 配置日志输出。

2.2 示例配置

下面是一个简单的 Caddyfile 示例,该示例配置了一个网站,并自动为该网站启用 HTTPS:

javaboy.org {root /var/www/htmltls admin@javaboy.orggziplog /var/log/caddy/access.log combined# 反向代理到后端服务proxy / localhost:8080 {websockettransparent}# 基本身份验证auth /admin user:password
}
解释
  • javaboy.org: 域名,可以是多个域名,用空格隔开。

  • root /var/www/html: 指定网站内容所在的目录。

  • tls admin@example.com: 为域名自动配置 TLS 证书,并指定用于接收证书通知的电子邮件地址。

  • gzip: 启用 GZIP 压缩。

  • log /var/log/caddy/access.log combined: 将访问日志记录到指定的文件中。

  • proxy / localhost:8080: 将所有请求代理到本地的 8080 端口。websockettransparent 分别表示支持 WebSocket 协议和透明代理。

  • auth /admin user:password: 对 /admin 路径下的资源启用基本的身份验证。

2.3 高级配置

Caddy 还支持更复杂的配置,例如使用子块来进一步细化配置。例如,可以使用 route 子块来根据请求路径执行不同的操作:

javaboy.org {root /var/www/htmltls admin@javaboy.org# 根据路径路由请求route {/static/* {gzipfileserver /var/www/static}/api/* {proxy / localhost:8000}/* {index index.html}}
}

在这个例子中,/static/* 路径下的请求被直接发送到 /var/www/static 文件夹,而 /api/* 路径下的请求被代理到本地的 8000 端口。

2.4 多个服务器配置

Caddyfile 支持在同一文件中配置多个服务器:

javaboy.org {# javaboy.org 的配置
}sub.javaboy.org {# sub.javaboy.org 的配置
}

2.5 动态配置

除了静态配置文件之外,Caddy 还支持动态配置,可以通过 HTTP API 来更改配置。这使得你可以根据运行时条件动态调整服务器行为。

三 最佳实践

3.1 部署静态网页

http://yousite.com {encode gzip # gzip压缩root * /var/web/wwwroot # web根目录file_server browse  # 启动静态资源
}

注意,如果配置根目录下有 index.html 文件,则会自动部署为静态网页,如果没有则为由 Caddy 提供的文件共享的浏览网页。

3.2 部署 File_server

yousite.com {root * /var/share #根目录file_server browse #启动web文件服务
}

3.3 反向代理

 yousite.com {reverse_proxy localhost:8082 #反向代理}

3.4 其他

caddy adapt  ## 加载配置文件caddy fmt  ## 格式化配置caddy start  ## 启动服务caddy reload ## 重新部署

四 小结

Caddy 内置了丰富的插件,例如内置 “file_server”、内置各种负载均衡策略等,这些插件组合在一起可以实现一些复杂的功能;Caddy 是采用 go 编写的,官方也给出了详细的开发文档,相较于 Nginx 来说,Caddy 的插件开发上手要容易得多;Caddy 本身针对数据存储、动态后端、配置文件转换等都内置了扩展接口,这为有特定需求的扩展开发打下了良好基础。

综合来看目前 Caddy2 的性能损失可接受的情况下,相较于 Nginx 绝对是个绝佳选择,各种新功能都能够满足现代化 Web 站点的需求,真香警告。

作者来源:江南一点雨  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣SQL仅数据库(570-579)

570. 至少有5名直接下属的经理 需求: 编写一个解决方案,找出至少有五个直接下属的经理 数据准备: Create table If Not Exists Employee (id int, name varchar(255), department varchar(255), managerId int) Truncate table Employee i…

PyTorch中,动态调整学习率(Learning Rate Scheduling),也可以根据损失函数的损失数值自动调整学习率

在PyTorch中,动态调整学习率(Learning Rate Scheduling)是一种常用的技术, 用于在训练过程中根据一定的策略调整学习率,以优化模型的训练效果和收敛速度。以下是一些常见的学习率调整策略: 1. **固定步长…

HTML沙漏爱心

目录 写在前面 完整代码 下载代码 代码分析 系列文章 写在最后 写在前面 教你用HTML语言实现炫酷的沙漏爱心,该代码不仅可以用电脑运行,手机、平板也可以直接运行哦。 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><…

【awk 】如何将一个文件按照同名字段进行合并?

目录 题目解答 题目 使用awk文本处理工具将一个名为c的文件按照同名字段进行合并&#xff0c;c的内容如下所示&#xff1a; 192.168.1.1: httpd 192.168.1.1: tomcat 192.168.1.2: httpd 192.168.1.2: postfix 192.168.1.3: mysqld 192.168.1.4: httpd示例输出&#xff1a; …

06:【江科大stm32】:定时器输入捕获功能

定时器输入捕获功能 1、通过定时器的输入捕获功能测量PWM波的频率2、PWMI模式测量频率和占空比 1、通过定时器的输入捕获功能测量PWM波的频率 定时器标准库相关的编程接口&#xff1a; ①PWM.c文件的代码如下&#xff1a; /*通过定时器TIM2生成一个分辨率为10us,频率为1KHz的…

【微信小程序】Mobx--绑定多个 store 以及命名空间

在实际开发中&#xff0c;一个页面或者组件可能会绑定多个 Store &#xff0c;这时候我们可以将 storeBindings 改造成数组。数组每一项就是一个个要绑定的 Store。 如果多个 Store 中存在相同的数据&#xff0c;显示会出现异常。还可以通过 namespace 属性给当前 Store 开启命…

【Java设计模式】Bridge模式:在Java中解耦抽象与实现

文章目录 【Java设计模式】Bridge模式&#xff1a;在Java中解耦抽象与实现一、概述二、Bridge设计模式的别名三、Bridge设计模式的意图四、Bridge模式的详细解释及实际示例五、Java中Bridge模式的编程示例六、Bridge模式类图七、Java中何时使用Bridge模式八、Java中Bridge模式的…

如何成为一个飞控算法工程师?

兄弟&#xff0c;这个问题问得好&#xff0c;但也别想着靠看几本书就能一步登天。飞控算法这玩意儿&#xff0c;真要干好了&#xff0c;不是简简单单几个公式几个库就能搞定的。你本科电子专业有点基础&#xff0c;玩过四轴飞行器也算是入门了&#xff0c;但要搞真算法&#xf…

机器学习工具

机器学习常用工具及库 环境依赖管理 Docker https://www.oracle.com/cn/cloud/cloud-native/container-registry/what-is-docker/ 隔离部署工具&#xff0c;能有效解决环境问题 Conda与Anaconda conda作为Python数据科学领域的常用软件&#xff0c;是对Python环境及相关依…

第8讲 ,ISP 串口程序下载

1 硬件的连接 需要使用 串口下载软件。 flymcu 这是 正点原子的 自启动电路。 2 stm32 的串口下载的原理 stm32 下载 只能是 串口一 &#xff0c; 也就是 PA9&#xff0c; PA10 3 然后是 stm32 的启动顺序 这里使用的是 第二种的 启动模式&#xff0c; 也就是 通过 串口进行烧…

如何使用IDEA搭建Mybatis框架环境(详细教程)

文章目录 ☕前言为什么学习框架技术Mybatis框架简介 &#x1f379;一、如何配置Mybatis框架环境1.1下载需要MyBatis的jar文件1.2部署jar文件1.3创建MyBatis核心配置文件configuration.xml1.4.创建持久类(POJO)和SQL映射文件1.5.创建测试类 &#x1f9cb;二、 MyBatis框架的优缺…

Unity获取SceneView尺寸

获取SceneView尺寸 var sceneView SceneView.lastActiveSceneView; var size new Vector2(sceneView.position.width,sceneView.position.height);

综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型&#xff08;Matlab&#xff09; AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析…

Ansible自动化运维实战:打造高效、可靠的系统管理方案!

Ansible是一个在自动化运维领域广泛使用的工具&#xff0c;它基于Python开发&#xff0c;能够实现批量系统配置、程序部署和运行命令等功能。以下将详细解析Ansible自动化运维项目的构建与应用&#xff1a; 项目结构设计 ansible.cfg&#xff1a;这是Ansible的主配置文件。inv…

推荐10个开源且实用的大模型

在AI和深度学习的快速发展中&#xff0c;许多开源模型逐渐成为中小企业和个人开发者的得力助手。这些模型通常参数较少&#xff0c;易于使用和部署&#xff0c;适合实际应用场景。本文将推荐10个在GitHub上比较实用的开源大模型&#xff0c;帮助你快速上手&#xff0c;解决实际…

vscode中如何设置不显示隐藏文件

在vscode中&#xff0c;有时候&#xff0c;会显示一些隐藏文件&#xff0c;如何设置让其不显示呢&#xff1f; 解决办法 例如&#xff1a;我这里有一个.vscode隐藏文件夹&#xff0c;是vscode默认生成的一个配置目录&#xff0c;我想要它不在资源管理器中进行显示。 操作步骤&a…

Cesium 地球云图

Cesium 地球云图 使用自定义图原(Primitive)实现。 支持速度和透明的动态调整。 支持设置云图高度, 当相机高度小于云图高度时, 渐隐消失。 Cesium 地球云图

在 VS Code 中使用 Git 源代码管理【Mac 版】

文章目录 一、Git 使用文档二、使用示例1、复制远程仓库地址2、查看当前所在的分支2.1、界面查看2.2、终端查看 3、修改/新增文件4、显示增改的详细内容5、添加暂存区6、查看/取消暂存的更改7、提交本地代码库8、待提交文件9、推送到远程仓库10、验证11、查看推送记录11.1、关于…

全国大学生数学建模比赛——关联规则

一、问题背景与关联规则适用性 在数学建模比赛中&#xff0c;常常会遇到需要分析大量数据以寻找变量之间潜在关系的问题。关联规则分析作为一种数据挖掘技术&#xff0c;特别适用于这种场景。例如&#xff0c;在一些实际问题中&#xff0c;可能需要从众多的因素中找出哪些因素之…

“#!”是什么命令?Shell中指定解释器

#!&#xff08;称为 shebang 或 hashbang&#xff09;后面的内容是 解释器 的路径。它用于指定执行脚本的解释器。这个标记告诉操作系统在执行脚本时应该使用哪个程序来解释脚本文件中的内容。 详细解释 shebang 的作用: #! 是一个特殊的字符序列&#xff0c;在脚本文件的第一…