0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_ro2CN3Fa 来源:芋道源码 作者:芋道源码 2022-11-15 10:18 次阅读

简介

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

88ddf688-648a-11ed-8abf-dac502259ad0.png

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

  • 官网:https://caddyserver.com
  • 文档:https://caddyserver.com/docs/

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

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

特性

  • 全自动支持 HTTP/2 协议,无需配置。
  • 全自动变成 HTTPS 站点,无需任何配置。
  • 合理使用多核
  • 支持 IPv6 环境
  • 对 WebSockets 有很好的支持
  • 可以自动把 Markdown 转成 HTML
  • Caddy 对 log 格式的定义很容易
  • 易于部署 ,没有依赖
  • 作为反向代理支持主动和被动健康检查、负载均衡、断路、缓存等功能。
  • 支持 Windows、 Linux、Mac 三大主流系统
相较于 Nginx 来说使用 Caddy 的优势如下
88f8f3ca-648a-11ed-8abf-dac502259ad0.png
  • 自动的 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://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

安装

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

Fedora/RHEL/CentOS 8
$dnfinstall'dnf-command(copr)'
$dnfcoprenable@caddy/caddy
$dnfinstallcaddy
MacOS
brewinstallcaddy
RHEL/CentOS 7
$yuminstallyum-plugin-copr
$yumcoprenable@caddy/caddy
$yuminstallcaddy
Debian/Ubuntu/Raspbian
$sudoaptinstall-ydebian-keyringdebian-archive-keyringapt-transport-https
$curl-1sLf'https://dl.cloudsmith.io/public/caddy/stable/gpg.key'|sudotee/etc/apt/trusted.gpg.d/caddy-stable.asc
$curl-1sLf'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt'|sudotee/etc/apt/sources.list.d/caddy-stable.list
$sudoaptupdate
$sudoaptinstallcaddy

安装完成后,在终端命令行下输入 caddy :

$caddy

Caddyisanextensibleserverplatform.

usage:
caddy[]

commands:
adaptAdaptsaconfigurationtoCaddy'snativeJSON
build-infoPrintsinformationaboutthisbuild
environPrintstheenvironment
file-serverSpinsupaproduction-readyfileserver
fmtFormatsaCaddyfile
hash-passwordHashesapasswordandwritesbase64
helpShowshelpforaCaddysubcommand
list-modulesListstheinstalledCaddymodules
reloadChangestheconfigoftherunningCaddyinstance
reverse-proxyAquickandproduction-readyreverseproxy
runStartstheCaddyprocessandblocksindefinitely
startStartstheCaddyprocessinthebackgroundandthenreturns
stopGracefullystopsastartedCaddyprocess
trustInstallsaCAcertificateintolocaltruststores
untrustUntrustsalocally-trustedCAcertificate
upgradeUpgradeCaddy(EXPERIMENTAL)
validateTestswhetheraconfigurationfileisvalid
versionPrintstheversion

Use'caddyhelp'formoreinformationaboutacommand.

Fulldocumentationisavailableat:
常用命令
$systemctlstart[stop|restart]caddy//启动服务
$systemctlreloadcaddy//重新加载配置文件
$systemctlstatuscaddy//查看运行状态

配置

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

常用配置
站点配置
(site_option){
encodezstdgzip
file_server
handle_errors{
rewrite*/{http.error.status_code}.html
file_server
}
importacme_https
importlog_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_snidomain.com
#打开或关闭管理端口
adminoff
}
错误页面跳转
www.mingongge.com{
root*/web/mingongge.com/
file_server
handle_errors{
rewrite*/{http.error.status_code}.html
file_server
}
}
Log 日志
(log_file){
log{
formatlogfmt
outputfile/var/log/caddy/{host}.access.log{
roll_keep7
}
}
}
Header
www.mingongge.com{
root*/web/mingongge.com/
file_server
headerAccess-Control-Allow-Origin*
headerCache-Controlmax-age=3600
header/css/*Cache-Controlmax-age=604800
}
Cache-Control
(cachecontrol){
header/css/*Cache-Controlmax-age=3600
header/img/*Cache-Controlmax-age=3600
header/js/*Cache-Controlmax-age=3600
}

反向代理

https://www.mingongge.com{
gzip
tlsadmin@mingongge.com
proxy/https://welcome.mingongge.com
}
快速创建一个站点
caddyfile-server--website./index--listen:8088--domainwww.mingongge.com

参数说明

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

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

#括号内为片段名称,可以自行定义
(TLS){
protocolstls1.2tls1.3
ciphersTLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}

#在任意位置可以引用此片段从而达到配置复用
importTLS
配置模块化

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

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

模块化配置实例

Caddyfile

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

(LOG){
log{
formatformatted"[{ts}]{request>remote_addr}{request>proto}{request>method}<- {status} ->{request>host}{request>uri}{request>headers>User-Agent>[0]}"{
time_format"iso8601"
}
outputfile"{args.0}"{
roll_size100mb
roll_keep3
roll_keep_for7d
}
}
}

(TLS){
protocolstls1.2tls1.3
ciphersTLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}

(HSTS){
header/Strict-Transport-Security"max-age=63072000"
}

(ACME_GANDI){
#从环境变量获取GANDI_API_TOKEN
dnsgandi{$GANDI_API_TOKEN}
}

#聚合上面的配置片段为新的片段
(COMMON_CONFIG){
#压缩支持
encodezstdgzip

#TLS配置
tls{
importTLS
importACME_GANDI
}

#HSTS
importHSTS
}

#开启HTTP3实验性支持
{
servers:443{
protocol{
experimental_http3
}
}
}

#引入其他具体的站点配置
import/etc/caddy/*.caddy
站点配置
www.mingongge.com{
#重定向到mingongge.com(默认302)
redirhttps://mingongge.com{uri}

#日志
importLOG"/data/logs/mingongge.com.log"

#TLS、HSTS、ACME等通用配置
importCOMMON_CONFIG
}

mingongge.com{
#路由
route/*{
reverse_proxymingongge_com:80
}

#日志
importLOG"/data/logs/mingongge.com.log"

#TLS、HSTS、ACME等通用配置
importCOMMON_CONFIG
}

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

总结

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



审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1256

    浏览量

    69343
  • 服务器
    +关注

    关注

    12

    文章

    9024

    浏览量

    85186
  • nginx
    +关注

    关注

    0

    文章

    143

    浏览量

    12163

原文标题:比 Nginx 性能更强的下一代 Web 服务器

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    nginx隐藏版本号与WEB服务器信息

    nginx不仅可以隐藏版本信息,还支持自定义web服务器信息 先看看最终的隐藏结果吧 具体怎么实现呢,其实也很简单,请往下看 1 官网下载最新稳定版 wget http://nginx
    的头像 发表于 11-22 10:25 97次阅读
    <b class='flag-5'>nginx</b>隐藏版本号与<b class='flag-5'>WEB</b><b class='flag-5'>服务器</b>信息

    nginx负载均衡配置介绍

    目录 nginx负载均衡 nginx负载均衡介绍 反向代理与负载均衡 nginx负载均衡配置 Keepalived高可用nginx负载均衡器 修改W
    的头像 发表于 11-10 13:39 187次阅读
    <b class='flag-5'>nginx</b>负载均衡配置介绍

    意法半导体下一代汽车微控制的战略部署

    ‍‍‍‍‍‍‍‍ 意法半导体致力于帮助汽车行业应对电气化和数字化的挑战,不仅提供现阶段所需的解决方案,未来还提供更强大的统的MCU平台开发战略,通过突破性创新支持下一代车辆架构和软件定义
    的头像 发表于 11-07 14:09 234次阅读

    Jtti:美国VPS开启nginx状态监控,查看web服务器的并发连接数

    |htaccess|asp|aspx|jsp|asa|mdb)$ { deny all; }location ~ ^/Nginxstatus/ {stub_status on;access_log off;}上面的代码红色部分为nginx的监控?。 2、重
    的头像 发表于 08-26 15:42 229次阅读

    IaaS+on+DPU(IoD)+下一代性能算力底座技术白皮书

    大规模生产环境落地应用的条件。某种程度上,IoD 技术已成为下一代性能算力底座的核心技术与最佳实践。 白皮书下载:*附件:IaaS+on+DPU(IoD)+下一代性能算力底座+技
    发表于 07-24 15:32

    如何使用espconn api实现Web服务器

    我正在尝试使用 espconn api 实现Web 服务器。 在些请求之后,我收到将此错误(err1,超过最大时间值)写入 uart,下一
    发表于 07-18 07:46

    如何使用nginx反向代理功能?保姆级教程!

    关于nginxnginx是款高性能的开源Web服务器软件,也可以用于反向代理、负载均衡等,并且具有高
    的头像 发表于 06-21 08:21 576次阅读
    如何使用<b class='flag-5'>nginx</b>反向代理功能?保姆级教程!

    24芯M16插头在下一代技术中的潜力

      德索工程师说道随着科技的飞速发展,下一代技术正逐渐展现出其独特的魅力和潜力。在这背景下,24芯M16插头作为种高性能、多功能的连接
    的头像 发表于 06-15 18:03 298次阅读
    24芯M16插头在<b class='flag-5'>下一代</b>技术中的潜力

    台达推出提高人工智能服务器和数据中心能效的下一代电源解决方案

    台达电子(Delta)是电源与散热管理解决方案的领导厂商,在IEEE应用电力电子会议暨博览会(APEC)2024上,推出了提高人工智能(AI)服务器和数据中心能效的下一代电源解决方案。
    的头像 发表于 04-10 15:06 939次阅读

    服务器操作系统有几种?

    是致力于加强下一代网络、运用和web服务项目的作用而设计方案,它对比 Windows server 2003在Web专用工具、虚拟技术、安全系数等层面强过Windows Server
    发表于 03-29 16:59

    苹果正努力为下一代iPhone搭载更强大的AI技术

    苹果公司正致力于在下一代iPhone上实现更强大的本地人工智能技术。近日,苹果收购了家专注于AI视频压缩技术的初创公司WaveOne,此举进步证明了苹果在AI领域的投入和决心。
    的头像 发表于 01-25 16:46 777次阅读

    Apache服务器Nginx服务器

    Apache和Nginx都是常见的开源Web服务器软件,它们用于处理HTTP请求并提供网站和应用程序的服务。下面是对Apache和Nginx
    的头像 发表于 01-22 16:48 524次阅读

    什么是web服务器?如何选择服务器配置?

    Web服务器种软件或硬件设备,用于托管和提供网页内容。它接收客户端(如浏览)发送的HTTP请求,并返回相应的网页内容或其他资源,以实现更高的
    的头像 发表于 01-03 15:25 1060次阅读

    Nginx在Windows/docker中的使用

    nginx个高性能的开源反向代理服务器web 服务器
    的头像 发表于 01-03 10:20 1758次阅读
    <b class='flag-5'>Nginx</b>在Windows/docker中的使用

    gpu服务器是干什么的 gpu服务器与cpu服务器的区别

     相比于传统的CPU服务器,GPU服务器支持同时计算大量相似的计算操作,可以实现更强的并行计算性能。GPU服务器通常配备多个高
    的头像 发表于 12-02 17:20 1862次阅读