比 Nginx 性能更强的下一代 Web 服务器
点击上方“芋道源码”,选择“设为星标”
管她前浪,还是后浪?
能浪的浪,才是好浪!
每天 10:33 更新文章,每天掉亿点点头发...
源码精品专栏
原创 | Java 2021 超神之路,很肝~
中文详细注释的开源项目
RPC 框架 Dubbo 源码解析
网络应用框架 Netty 源码解析
消息中间件 RocketMQ 源码解析
数据库中间件 Sharding-JDBC 和 MyCAT 源码解析
作业调度中间件 Elastic-Job 源码解析
分布式事务中间件 TCC-Transaction 源码解析
Eureka 和 Hystrix 源码解析
Java 并发源码
来源:民工哥技术之路
简介
特性
安装
配置
模块化配置实例
总结
简介
Caddy 2 是一个强大的、企业级的、开源的 Web 服务器。是一个 Go 编写的 Web 服务器,类似于 Nginx,Caddy 提供了更加强大的功能。
支持 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 的优势如下
自动的 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
$ 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 :
$ caddyCaddy is an extensible server platform.usage:caddy <command> [<args...>]commands:adapt Adapts a configuration to Caddy's native JSONbuild-info Prints information about this buildenviron Prints the environmentfile-server Spins up a production-ready file serverfmt Formats a Caddyfilehash-password Hashes a password and writes base64help Shows help for a Caddy subcommandlist-modules Lists the installed Caddy modulesreload Changes the config of the running Caddy instancereverse-proxy A quick and production-ready reverse proxyrun Starts the Caddy process and blocks indefinitelystart Starts the Caddy process in the background and then returnsstop Gracefully stops a started Caddy processtrust Installs a CA certificate into local trust storesuntrust Untrusts a locally-trusted CA certificateupgrade Upgrade Caddy (EXPERIMENTAL)validate Tests whether a configuration file is validversion Prints the versionUse '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 gzipfile_serverhandle_errors {rewrite * /{http.error.status_code}.htmlfile_server}import acme_httpsimport log_fileroot * /www/{host}
}
多域名配置
地址 {........
}
这个地址支持以下几种格式
localhost
example.com
:443
http://example.com
localhost:8080
127.0.0.1
[::1]:2015
example.com/foo/*
*.example.com
http://
全局配置选项
{# 开启所有的调试输出debug # 设定默认的snidefault_sni domain.com# 打开或关闭管理端口admin off
}
错误页面跳转
www.mingongge.com {root * /web/mingongge.com/file_serverhandle_errors {rewrite * /{http.error.status_code}.htmlfile_server}
}
Log 日志
(log_file) {log {format logfmtoutput file /var/log/caddy/{host}.access.log {roll_keep 7}}
}
Header
www.mingongge.com {root * /web/mingongge.com/file_serverheader Access-Control-Allow-Origin *header Cache-Control max-age=3600header /css/* Cache-Control max-age=604800
}
Cache-Control
(cachecontrol) {header /css/* Cache-Control max-age=3600header /img/* Cache-Control max-age=3600header /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.3ciphers 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 100mbroll_keep 3roll_keep_for 7d}}
}(TLS) {protocols tls1.2 tls1.3ciphers 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_TOKENdns gandi {$GANDI_API_TOKEN}
}# 聚合上面的配置片段为新的片段
(COMMON_CONFIG) {# 压缩支持encode zstd gzip# TLS 配置tls {import TLSimport ACME_GANDI}# HSTSimport 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 开发插件),对于后期的开发更容易上手。
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。
提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
比 Nginx 性能更强的下一代 Web 服务器相关推荐
- UC 伯克利华人一作:卷积让视觉 Transformer 性能更强,ImageNet 继续刷点!
转自 | 新智元 来源 | arXiv 编辑 | LQ Priscilla Convolutional stem is all you need! Facebook AI和UC伯克利联手,探究视觉Tr ...
- 服务器2颗cpu的性能,DIY从入门到放弃:两颗CPU性能更强吗?
如果DIY让你觉得头疼,说明你的思路是正确的. 两根内存组双通道性能更强,两块硬盘组RAID速度提升,那你肯定想过,给主板多开一个CPU插槽组成双CPU平台,性能岂不是会更强吗? 这个问题问得好 来来 ...
- i3 7100黑苹果_苹果连发三款新品,售价更低!性能更强!| 数码
哈喽大家好,欢迎来到黑马公社.就在昨晚,苹果悄然更新了多款新品.其中包含了新款的MacBook air.Mac mini以及iPad Pro.这些新品有什么升级呢相比上代值不值得购买呢,看完这篇文章你 ...
- 三星和华为均发布了5G手机芯片,谁的性能更强?
华为在今天发布了新款高端芯片麒麟990,而三星则抢在华为之前于9月4日发布了手机芯片Exynos980,这两款芯片均为5G手机SOC芯片,这两家企业也是针锋相对的手机企业,那么这两款芯片谁的性能更强呢 ...
- oppo k10 Pro和iqooneo6哪个性能更强 哪个值得买呢
oppo k10系列在近日正式发布了,作为一款主打性价比的手机,在配置上也十分亮眼,但如果和前面发布的iqooneo6对比,oppo k10 Pro和iqooneo6哪个性能更强? 哪个值得买呢?下面 ...
- 天玑9000+和骁龙8gen1+哪个性能更强 两者配置对比
天玑9000+在今日正式发布了,作为天玑9000的升级版,在配置上有所提升,但如果和高通的骁龙8gen1+相对比,天玑9000+和骁龙8gen1+哪个性能更强?下面来看看两者的配置对比吧. 天玑900 ...
- Memblaze发布又一款PCIe Gen4系列企业级SSD —— 性能更强,功耗更低
2021年11月11日 – 继4月发布首款 PCIe 4.0 PBlaze6 6920 旗舰系列 SSD 以来,今天,Memblaze(北京忆恒创源科技股份有限公司)正式宣布推出面向主流市场的 PBl ...
- 华为nova10Pro和华为nova9Pro有哪些区别 哪个性能更强
华为手机的Nova系列一直都比较受年轻人欢迎,而在近期华为nova10系列也即将要发布了,那么,华为nova10Pro和华为nova9Pro有哪些区别? 哪个性能更强?下面就一起来看看吧. 华为nov ...
- nginx做反向代理和后端web服务器之间的交互
1.Nginx是什么? Nginx就是反向代理服务器. 首先我们先来看看什么是代理服务器,代理服务器一般是指局域网内部的机器通过代理服务发送请求到互联网上的服务器,代理服务器一般作用于客户端.比如Go ...
最新文章
- 腾讯国风AI虚拟人学会作诗书法,背靠开源模型SongNet
- Hadoop 06_MapReduce2.0(YARN)
- mysql 存储过程 插入记录_mysql 存储过程 插入记录
- 如何在5分钟内通过身份验证构建RESTful API —全部从命令行(第1部分)
- 新手入坑 java的开发语言环境
- Registry注册机制
- 寻找优秀的AI公司与受人尊敬的资本助推者 | 量子位年度评选进行时
- pinpoint agent性能优化方面官方文档翻译
- 常用工具使用(sublimeText)
- 2018JavaScript状态调查:5个重要的思考( import takeaways) (摘译)
- Yii2 log分析
- 【PDF】PDF文件分页拆分(免费方法)
- 有关电子邮箱的各种协议
- hbase数据库scan操作_HBase scan命令详解
- 地理信息系统(复习)
- pyecharts源码解读(15)图表类包charts之组合图表: 选项卡Tab
- Pytorch Bug解决:RuntimeError: running_mean should contain 1 elements not 10
- win10不兼容 软件 ietest
- python 保存图片
- 使用Xcode的Instruments检测解决iOS内存泄露(leak)
热门文章
- C语言中文件的打开和关闭
- Oracle 11g新特性direct path read引发的系统停运故障诊断处理
- android 802.1x认证,清华大学无线校园网802.1x认证登录.PDF
- Cygwin使用心得
- Windows 安装 cygwin 详细步骤
- 用友畅捷通T3普及版10.9升级到T3标准版11.2,'dbo.fa_Q_YNZCTJB1' 无效
- 图像加噪(高斯噪声和椒盐噪声)
- php发表说说,发表qq说说的句子
- kicad最小布线宽度默认是多少_智能家居装修布线详解
- 挂载ISO镜像文件到Linux系统