比 Nginx 性能更强的下一代 Web 服务器

简介: 比 Nginx 性能更强的下一代 Web 服务器


来源:民工哥技术之路


简介

Caddy 2 是一个强大的、企业级的、开源的 Web 服务器。是一个 Go 编写的 Web 服务器,类似于 Nginx,Caddy 提供了更加强大的功能。

支持 HTTP/2 的 Web 服务端。它使用 Golang 标准库提供 HTTP 功能。Caddy 一个显著的特性是默认启用HTTPS。它是第一个无需额外配置即可提供HTTPS 特性的Web 服务器。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

特性

  • 全自动支持 HTTP/2 协议,无需配置。
  • 全自动变成 HTTPS 站点,无需任何配置。
  • 合理使用多核
  • 支持 IPv6 环境
  • 对 WebSockets 有很好的支持
  • 可以自动把 Markdown 转成 HTML
  • Caddy 对 log 格式的定义很容易
  • 易于部署 ,没有依赖
  • 作为反向代理支持主动和被动健康检查、负载均衡、断路、缓存等功能。
  • 支持 Windows、 Linux、Mac 三大主流系统
相较于 Nginx 来说使用 Caddy 的优势如下

  • 自动的 HTTPS 证书申请(ACME HTTP/DNS 挑战)
  • 自动证书续期以及 OCSP stapling 等
  • 更高的安全性包括但不限于 TLS 配置以及内存安全等
  • 友好且强大的配置文件支持
  • 支持 API 动态调整配置(有木有人可以搞个 Dashboard)
  • 支持 HTTP3(QUIC)
  • 支持动态后端,例如连接 Consul、作为 k8s ingress 等
  • 后端多种负载策略以及健康检测等
  • 本身 Go 编写,高度模块化的系统方便扩展(CoreDNS 基于 Caddy1 开发)

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

安装

下载地址:https://caddyserver.com/download

Fedora/RHEL/CentOS 8
$ dnf install 'dnf-command(copr)'
$ dnf copr enable @caddy/caddy
$ dnf install caddy
MacOS
brew install caddy
RHEL/CentOS 7
$ yum install yum-plugin-copr
$ yum copr enable @caddy/caddy
$ yum install caddy
Debian/Ubuntu/Raspbian
$ sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
$ 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
Caddy is an extensible server platform.
usage:
  caddy <command> [<args...>]
commands:
  adapt           Adapts a configuration to Caddy's native JSON
  build-info      Prints information about this build
  environ         Prints the environment
  file-server     Spins up a production-ready file server
  fmt             Formats a Caddyfile
  hash-password   Hashes a password and writes base64
  help            Shows help for a Caddy subcommand
  list-modules    Lists the installed Caddy modules
  reload          Changes the config of the running Caddy instance
  reverse-proxy   A quick and production-ready reverse proxy
  run             Starts the Caddy process and blocks indefinitely
  start           Starts the Caddy process in the background and then returns
  stop            Gracefully stops a started Caddy process
  trust           Installs a CA certificate into local trust stores
  untrust         Untrusts a locally-trusted CA certificate
  upgrade         Upgrade Caddy (EXPERIMENTAL)
  validate        Tests whether a configuration file is valid
  version         Prints the version
Use 'caddy help <command>' for more information about a command.
Full documentation is available at:
常用命令
$ systemctl start[stop|restart] caddy  //启动服务
$ systemctl reload caddy //重新加载配置文件
$ systemctl status caddy //查看运行状态

配置

Caddy2 的配置文件核心采用 json,但是 json 可读性不强,所以官方维护了一个转换器,抽象出称之为 Caddyfile 的新配置格式;关于 Caddyfile 的完整语法请查看官方文档。文档地址:https://caddyserver.com/docs/caddyfile

常用配置
站点配置
(site_option) {
  encode zstd gzip
  file_server
  handle_errors {
    rewrite * /{http.error.status_code}.html
    file_server
  }
  import acme_https
  import log_file
  root * /www/{host}
}
多域名配置
地址 {
    ........
}

这个地址支持以下几种格式

localhost
example.com
:443
http://example.com
localhost:8080
127.0.0.1
[::1]:2015
example.com/foo/*
*.example.com
http://
全局配置选项
{
    # 开启所有的调试输出
    debug    
    # 设定默认的sni
    default_sni domain.com
    # 打开或关闭管理端口
    admin off
}
错误页面跳转
www.mingongge.com {
    root * /web/mingongge.com/
    file_server
    handle_errors {
        rewrite * /{http.error.status_code}.html
        file_server
    }
}
Log 日志
(log_file) {
  log {
    format logfmt
    output file /var/log/caddy/{host}.access.log {
      roll_keep 7
    }
  }
}
Header
www.mingongge.com {
  root * /web/mingongge.com/
  file_server
  header Access-Control-Allow-Origin *
  header Cache-Control max-age=3600
  header /css/* Cache-Control max-age=604800
}
Cache-Control
(cachecontrol) {
  header /css/* Cache-Control max-age=3600
  header /img/* Cache-Control max-age=3600
  header /js/* Cache-Control max-age=3600
}

反向代理

https://www.mingongge.com {
gzip
tls admin@mingongge.com
proxy / https://welcome.mingongge.com
}
快速创建一个站点
caddy file-server --website ./index --listen :8088 --domain www.mingongge.com

参数说明

file-server #这是一个文件服务器
--website   #文件服务的根目录
./index     #首页文件的存储目录(如存放 index.html)
--listen :8088  #定义监听端口
--domain www.mingongge.com  #绑定域名
配置片段

Caddyfile 支持类似代码中 function 一样的配置片段,这些配置片段可以在任意位置被 import,同时可以接受参数,以下为配置片断示例:

# 括号内为片段名称,可以自行定义
(TLS) {
    protocols tls1.2 tls1.3
    ciphers TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}
# 在任意位置可以引用此片段从而达到配置复用
import TLS
配置模块化

import 指令除了支持引用配置片段以外,还支持引用外部文件,同时支持通配符,有了这个命令以后我们就可以方便的将配置文件进行模块化处理:

# 引用外部的 /etc/caddy/*.caddy
import /etc/caddy/*.caddy

模块化配置实例

Caddyfile

Caddyfile 类似于 nginx 的 nginx.conf 主配置。

(LOG) {
    log {       
        format formatted "[{ts}] {request>remote_addr} {request>proto} {request>method} <- {status} -> {request>host} {request>uri} {request>headers>User-Agent>[0]}"  {
            time_format "iso8601"
        }
        output file "{args.0}" {
            roll_size 100mb
            roll_keep 3
            roll_keep_for 7d
        }
    }
}
(TLS) {
    protocols tls1.2 tls1.3
    ciphers TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}
(HSTS) {
    header / Strict-Transport-Security "max-age=63072000"
}
(ACME_GANDI) {
    # 从环境变量获取 GANDI_API_TOKEN
    dns gandi {$GANDI_API_TOKEN}
}
# 聚合上面的配置片段为新的片段
(COMMON_CONFIG) {
    # 压缩支持
    encode zstd gzip
    # TLS 配置
    tls {
        import TLS
        import ACME_GANDI
    }
    # HSTS
    import HSTS
}
# 开启 HTTP3 实验性支持
{
    servers :443 {
        protocol {
            experimental_http3
        }
    }
}
# 引入其他具体的站点配置
import /etc/caddy/*.caddy
站点配置
www.mingongge.com {
    # 重定向到 mingongge.com(默认 302)
    redir https://mingongge.com{uri}
    # 日志
    import LOG "/data/logs/mingongge.com.log"
    # TLS、HSTS、ACME 等通用配置
    import COMMON_CONFIG
}
mingongge.com {
    # 路由
    route /* {
        reverse_proxy mingongge_com:80
    }
    # 日志
    import LOG "/data/logs/mingongge.com.log"
    # TLS、HSTS、ACME 等通用配置
    import COMMON_CONFIG
}

配置完成后,通过 systemctl start caddy 去启动 caddy 服务器。每次配置修改后可以通过 systemctl reload caddy 进行配置重载。这些命令的功能与 Nginx 的命令功能基本一样。

总结

Caddy 内置了丰富的插件,例如 “file_server”、内置各种负载均衡策略等,这些插件组合在一起可以实现一些复杂的功能。Caddy 采用 Go 语言编写,相比较而言(Nginx 通过 Lua 或者 C 开发插件),对于后期的开发更容易上手。



相关文章
|
10天前
|
应用服务中间件 网络安全 nginx
快速上手!使用Docker和Nginx部署Web服务的完美指南
快速上手!使用Docker和Nginx部署Web服务的完美指南
|
6天前
|
存储 弹性计算 运维
深度解读:阿里云服务器ECS经济型e实例配置整理和性能参数表
阿里云推出经济型ECS e系列服务器,适用于个人开发者、学生和小微企业。该系列采用Intel Xeon Platinum处理器,支持多种CPU内存配比,性价比高,2核2G3M配置只需99元/年,新老用户不限量购买且续费不涨价。提供相同可用性SLA和安全标准,具备ESSD Entry云盘等企业级特性。适合中小型网站、开发测试和轻量级应用
|
11天前
|
SQL 缓存 数据库
在Python Web开发过程中:数据库与缓存,如何使用ORM(例如Django ORM)执行查询并优化查询性能?
在Python Web开发中,使用ORM如Django ORM能简化数据库操作。为了优化查询性能,可以:选择合适索引,避免N+1查询(利用`select_related`和`prefetch_related`),批量读取数据(`iterator()`),使用缓存,分页查询,适时使用原生SQL,优化数据库配置,定期优化数据库并监控性能。这些策略能提升响应速度和用户体验。
10 0
|
18天前
|
应用服务中间件 Linux 开发工具
如何在阿里云服务器快速搭建部署Nginx环境
以下是内容的摘要: 本文档主要介绍了在阿里云上购买和配置服务器的步骤,包括注册阿里云账号、实名认证、选择和购买云服务器、配置安全组、使用Xshell和Xftp进行远程连接和文件传输,以及安装和配置Nginx服务器的过程。在完成这些步骤后,你将能够在服务器上部署和运行自己的网站或应用。
|
19天前
|
缓存 负载均衡 数据库
优化后端性能:提升Web应用响应速度的关键策略
在当今数字化时代,Web应用的性能对于用户体验至关重要。本文探讨了如何通过优化后端架构和技术手段,提升Web应用的响应速度。从数据库优化、缓存机制到异步处理等多个方面进行了深入分析,并提出了一系列实用的优化策略,以帮助开发者更好地应对日益增长的用户访问量和复杂的业务需求。
16 1
|
23天前
|
弹性计算 应用服务中间件 Linux
阿里云ECS服务器上从零开始搭建nginx服务器
阿里云ECS服务器上从零开始搭建nginx服务器
|
23天前
|
安全 Java 应用服务中间件
轻量级奇迹:Java 18迎来迷你Web服务器的时代
轻量级奇迹:Java 18迎来迷你Web服务器的时代
19 0
轻量级奇迹:Java 18迎来迷你Web服务器的时代
|
1月前
|
存储 弹性计算 缓存
阿里云服务器经济型e和通用算力型u1实例性能、适用场景简介及常见问题参考
在2024年阿里云活动中,价格比较优惠的云服务器实例主要有经济型e和通用算力型u1实例,经济型e实例(如2核2G3M,99元/年)适合个人和小型企业建站、开发测试,而通用算力型u1实例(如2核4G5M,199元/年)适合多种企业应用。在目前的活动中,经济型e和通用算力型u1实例还有2核4G、2核8G、4核8G、4核16G、8核16G等配置可选,有的新手用户由于是初次使用阿里云服务器,对于经济型e和通用算力型u1实例的相关性能并不是很清楚,本文为大家做个简单的介绍,以供参考。
阿里云服务器经济型e和通用算力型u1实例性能、适用场景简介及常见问题参考
|
1月前
|
网络协议 应用服务中间件 Apache
Nginx直播服务器搭建及推拉流测试
Nginx直播服务器搭建及推拉流测试
51 2
|
1月前
|
负载均衡 架构师 应用服务中间件
FastDFS+Nginx搭建一个本地文件服务器
FastDFS+Nginx搭建一个本地文件服务器
35 0