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

    文章

    1302

    浏览量

    73642
  • 服务器
    +关注

    关注

    13

    文章

    10094

    浏览量

    90875
  • nginx
    +关注

    关注

    0

    文章

    180

    浏览量

    12966

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何快速在云服务器上部署Web环境?

    如何快速在云服务器上部署Web环境
    的头像 发表于 10-14 14:16 309次阅读

    Nginx在企业环境中的调优策略

    Nginx作为现代互联网架构中最重要的Web服务器和反向代理服务器,其性能调优对企业级应用的稳定性和效率至关重要。本指南将从运维实践角度出发
    的头像 发表于 07-14 11:13 400次阅读

    Nginx和Apache的差异

    Nginx个 轻量级/高性能 的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和IMAP 协议。
    的头像 发表于 07-09 09:45 473次阅读

    Nginx配置终极指南

    Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断
    的头像 发表于 06-18 15:56 797次阅读
    <b class='flag-5'>Nginx</b>配置终极指南

    云原生环境里Nginx的故障排查思路

    本文聚焦于云原生环境下Nginx的故障排查思路。随着云原生技术的广泛应用,Nginx作为常用的高性能Web服务器和反向代理
    的头像 发表于 06-17 13:53 637次阅读
    云原生环境里<b class='flag-5'>Nginx</b>的故障排查思路

    Nginx基础安装与配置教程

    说起Web服务器,大家第反应可能是Apache,但作为个在运维路上摸爬滚打的技术人,我必须要为Nginx正名
    的头像 发表于 06-13 16:13 795次阅读

    如何配置Linux防火墙和Web服务器

    在当今数字化时代,网络安全显得尤为重要。Linux作为种开源操作系统,广泛应用于服务器管理和网络配置中。本篇文章将详细介绍如何配置Linux防火墙和Web服务器,确保内网与外网的安全
    的头像 发表于 05-24 15:26 1642次阅读
    如何配置Linux防火墙和<b class='flag-5'>Web</b><b class='flag-5'>服务器</b>

    Nginx缓存配置详解

    Nginx个功能强大的 Web 服务器和反向代理服务器,它可以用于实现静态内容的缓存,缓存可以分为客户端缓存和
    的头像 发表于 05-07 14:03 1037次阅读
    <b class='flag-5'>Nginx</b>缓存配置详解

    Ubuntu 系统部署 Caddy Web 服务器全攻略!

    本文将以简明教程形式,指导您在Ubuntu系统上安装并运行新一代Web服务器Caddy。相比传统Nginx与Apache,Caddy凭借两大核心优势脱颖而出:原生HTTPS自动证书管理
    的头像 发表于 03-25 09:19 870次阅读
    Ubuntu 系统部署 Caddy <b class='flag-5'>Web</b> <b class='flag-5'>服务器</b>全攻略!

    Nginx常见面试题总结

    Nginx个 轻量级/高性能的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。
    的头像 发表于 03-03 09:36 1534次阅读
    <b class='flag-5'>Nginx</b>常见面试题总结

    HPE携手英特尔至强6,打造新一代服务器性能巅峰

    近日,慧与科技(HPE)推出了八款全新HPE ProLiant Compute Gen12服务器,标志着新一代企业级服务器领域的新标杆正式诞生。这系列
    的头像 发表于 02-18 10:38 701次阅读

    华为云 Flexus 云服务器 X 实例下的 Redis 性能基准测试

    中的杰出代表,展现了卓越的能力。 Flexus 云服务器 X 实例是针对中小企业和开发者的下一代灵活计算云服务器,能够智能地适应不同业务负载,特别适用于电商直播、企业网站、开发测试环境、游戏
    的头像 发表于 01-23 18:07 705次阅读
    华为云 Flexus 云<b class='flag-5'>服务器</b> X 实例下的 Redis <b class='flag-5'>性能</b>基准测试

    华为 FlexusX 与 Docker+Nginx 的高效整合之路

    前言 华为 FlexusX 携手 Docker+Nginx,高效整合,云端性能再升级!FlexusX 服务器,依托华为强大的技术实力,为 Docker 容器与 Nginx
    的头像 发表于 01-23 17:55 569次阅读
    华为 FlexusX 与 Docker+<b class='flag-5'>Nginx</b> 的高效整合之路

    部署音乐流媒体服务器 mStream

    传统服务器,云服务器能够提供更好的成本效益、更高的可用性和更强的数据安全性,适合各种规模的企业使用。 华为云下一代服务器 Flexus X
    的头像 发表于 01-17 09:20 1082次阅读
    部署音乐流媒体<b class='flag-5'>服务器</b> mStream

    华为云弹性云服务器 FlexusX 实例下的 Nginx 性能测试

    Nginx 性能测试。   、华为云弹性云服务器 FlexusX 实例简介 华为云弹性云服务器 FlexusX 实例是华为公司提供的
    的头像 发表于 01-17 09:17 1172次阅读
    华为云弹性云<b class='flag-5'>服务器</b> FlexusX 实例下的 <b class='flag-5'>Nginx</b> <b class='flag-5'>性能</b>测试