Caddy Vs Nginx,原来好用的https代理早就有了(工具分享)

Nginx是一款非常流行的Web服务器,在Github上已有16K+Star,我们经常用它来做静态资源托管或反向代理。最近试用了一款全新的Web服务器Caddy,Star数超越Nginx,标星38K+Star。试用了一下Caddy,发现它使用起来比Nginx优雅多了,功能也很强大,分享一下。

Caddy 简介

Caddy是一个轻量级、高效的开源Web服务器,以其HTTP/2支持和自动HTTPS著名,具备简单配置和高性能等特性。与传统的服务器(如 Nginx)相比,Caddy 的配置通常更为简洁和易于使用,特别是对于初学者和小型项目非常友好。

它是一个 Go 编写的 Web 服务器,类似于 Nginx,Caddy 提供了更加强大的功能,随着 v2 版本发布,Caddy 已经可以作为中小型站点 Web 服务器的另一个选择。安装也很简单,可通过一键脚本或手动下载。Caddyfile用于配置主机、反向代理和自动HTTPS,使其成为易于管理和部署的,除Nginx外的新选择。

优点
  1. 自动 HTTPS
  • Caddy 默认支持自动获取和续期 SSL/TLS 证书,使用 Let’s Encrypt,无需手动配置证书,极大降低了安全配置的复杂度。
  1. 简洁易用的配置文件
  • Caddy 的配置文件(Caddyfile)语法简单,易于理解和使用,适合初学者快速上手。
  1. 内置文件服务器
  • Caddy 自带文件服务器功能,只需简单配置即可为静态文件提供服务。
  1. 现代化特性
  • Caddy 原生支持 HTTP/2 和 QUIC(HTTP/3),提高了网站的性能和加载速度。
  1. 插件支持
  • Caddy 提供丰富的插件体系,允许用户通过插件扩展功能,如反向代理、路由等。
  1. 高性能
  • 尽管配置简单,但 Caddy 在处理静态内容和小型应用时表现良好,具有高性能的特性。

Caddy 的默认端口

Caddy 默认监听的端口如下:

  • HTTP: 80
  • HTTPS: 443

在使用 Caddy 时,它会自动为域名申请和管理 SSL/TLS 证书,使用 Let’s Encrypt 进行免费证书的自动获取和续期。

Caddy 的安装与基本使用

1. 安装 Caddy

您可以通过以下方式之一安装 Caddy:

  • 使用包管理器(例如,aptbrew等)进行安装。
  • 直接下载二进制文件。
  • 使用 Docker。

以下是使用 apt 安装 Caddy 的示例(适用于 Debian/Ubuntu):

sudo apt update
sudo apt install -y debian-keyring debian-archive-keyring
echo "deb [signed-by=/usr/share/keyrings/caddy-archive-keyring.gpg] https://dl.caddyserver.com/debian/ caddy main" | sudo tee /etc/apt/sources.list.d/caddy.list
curl -s https://dl.caddyserver.com/debian/caddy.gpg | sudo gpg --dearmor --output /usr/share/keyrings/caddy-archive-keyring.gpg
sudo apt update
sudo apt install caddy

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

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

2. 配置 Caddy

Caddy 的默认配置文件位置通常是 /etc/caddy/Caddyfile

以下是一个简单的示例 Caddyfile

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

这个配置的意思是,Caddy 会在 example.com 域名下提供 /var/www/html 目录里的静态文件,并启用文件服务器。

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

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

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

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

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

javaboy.org {
    # 配置指令
}

常见指令

这里有一些常用的指令:

  • root: 指定网站的根目录。
  • tls: 用于自动获取和管理 TLS/SSL 证书。
  • proxy: 用于配置反向代理。
  • rewrite:用于重写 URL。
  • gzip: 开启 GZIP 压缩。
  • auth: 配置基本的身份验证。
  • cache: 配置缓存设置。
  • log:配置日志输出。

示例配置
下面是一个简单的 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 端口。websocket 和 transparent 分别表示支持WebSocket 协议和透明代理。
  • auth /admin user:password: 对 /admin 路径下的资源启用基本的身份验证。

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

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

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

3. 启动 Caddy

Caddy 通常作为系统服务运行,可以使用如下命令启动:

sudo systemctl start caddy
sudo systemctl enable caddy  # 设置为开机自启

常见用法

部署静态网页

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

部署 File_server

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

反向代理

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

其他

caddy adapt  ## 加载配置文件
  
caddy fmt	 ## 格式化配置
  
caddy start  ## 启动服务

caddy reload ## 重新部署

简单使用举例

安装完成后,修改:/etc/caddy/Caddyfile文件:

# The Caddyfile is an easy way to configure your Caddy web server.
#
# https://caddyserver.com/docs/caddyfile
# The configuration below serves a welcome page over HTTP on port 80.  To use
# your own domain name with automatic HTTPS, ensure your A/AAAA DNS record is
# pointing to this machine's public IP, then replace `http://` with your domain
# name.  Refer to the documentation for full instructions on the address
# specification.
#
# https://caddyserver.com/docs/caddyfile/concepts#addresses
http://:8000 {
    # Set this path to your site's directory.
    root * /root/caddy

    # Enable the static file server.
    file_server

    # Another common task is to set up a reverse proxy:
    # reverse_proxy localhost:8080

    # Or serve a PHP site through php-fpm:
    # php_fastcgi localhost:9000

    # Refer to the directive documentation for more options.
    # https://caddyserver.com/docs/caddyfile/directives
}
# As an alternative to editing the above site block, you can add your own site
# block files in the Caddyfile.d directory, and they will be included as long
# as they use the .caddyfile extension.
import Caddyfile.d/*.caddyfile

注意这上面的:8000 是我加上去的。因为不加的话默认它是80端口。
然后,启动起来即可:

#停止
caddy stop
#后台启动
caddy start 
#直接运行,注意需要指定 --config /etc/caddy/Caddyfile,否则只会启动api,默认api在2019端口
caddy run --config /etc/caddy/Caddyfile

在这里插入图片描述

Caddy vs Nginx

特性CaddyNginx
配置方式使用 Caddyfile,配置简洁易懂使用 nginx.conf,配置项较多
HTTPS 自动化支持自动获取和续期 SSL/TLS 证书需要手动配置证书
性能对静态文件和小型应用优化良好性能极高,适用于大规模并发连接
安装简单,单个二进制文件安装过程相对复杂
模块提供多个内置模块,支持插件扩展模块化设计,但需要手动编译

结论

Caddy 是一款适合快速部署和简单配置的现代 Web 服务器,对于初学者和小型项目推荐使用。而 Nginx 则适合需要高性能和高并发处理的场景,特别是在配置需要细致调节的情况下。

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

根据项目需求选择适合的服务器,Caddy 适用于简单的静态网站,而 Nginx 在处理复杂的负载均衡和动态内容时效果更佳。

其他资源

从简单到强大:再次探索Caddy服务器的魅力
一个比 Nginx 还简单的 Web 服务器
超越 Nginx!号称下一代 Web 服务器,用起来够优雅!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

特立独行的猫a

您的鼓励是我的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值