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

_江南一点雨 2024-09-05 10:33:01 阅读 60

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

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

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

自动HTTPS:Caddy 的自动 TLS 功能,让 HTTPS 变得触手可及,无需额外配置。配置简便性:Caddy 提供了两种配置方式——简洁的 Caddyfile 和功能丰富的 JSON 格式。配置灵活性:通过 JSON API,Caddy 允许实时更新配置,提供了极大的灵活性。代理能力:Caddy 的 HTTP 反向代理功能强大而灵活。静态资源托管:作为静态文件服务器,Caddy 已经证明了其在生产环境中的可靠性和扩展性。全平台支持:Caddy 支持 Linux、Windows、macOS 等多种操作系统。高性能:Go 语言的开发背景,保证了 Caddy 的高效性能和内存安全。

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

一 安装

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

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

<code>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/html

tls admin@javaboy.org

gzip

log /var/log/caddy/access.log combined

# 反向代理到后端服务

proxy / localhost:8080 {

websocket

transparent

}

# 基本身份验证

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/html

tls admin@javaboy.org

# 根据路径路由请求

route {

/static/* {

gzip

fileserver /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 站点的需求,真香警告。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。