把 2 月份写的一个说明文档翻了出来,在博客上发表备份一下。
一、Caddy 基本信息介绍
1. 官方介绍:
Caddy 是具有自动 HTTPS 的 HTTP/2 Web 服务器(使用 Golang 开发) 。
其他 Web 服务是专为 Web 设计的,但 Caddy 是专为人类设计的,并兼顾了当今的 Web。
2. 特性说明:
✔ 静态文件
默认情况下,Caddy 在当前工作目录中提供静态文件服务。它非常简单,工作速度快。
✔ 动态网站
Caddy 还可用于通过模板、代理、FastCGI 和插件使用动态站点。
✔ 配置简单
Caddyfile,一种简单,直观的配置站点的方法。它不是脚本,也不难记忆。
✔ 零停机时间重载
在进行配置更改后,使用 USR1 信号在 Unix 系统上正常重新加载 Caddy,停机时间为零。
✔ 可扩展核心
可以通过插件扩展。所有服务器类型、指令、DNS 提供程序和更多功能都是插件!它们很容易编写并直接编译。
✔ 自动 TLS
唯一默认使用 HTTPS 的 Web 服务器。具有现代协议的强化 TLS 堆栈可保护隐私并暴露 MITM 攻击。
✔ 跨平台使用
支持 Windows、macOS、Linux、BSD、Android、Solaris、32-bit、x64、ARM、mips64 ......
✔ 使用多核 CPU
当任务变得艰难时,Caddy 开始使用更多的 CPU。Go 的调度程序理解 Go 代码,而 goroutine 比系统线程更轻量级,所以它很快。
✔ 负载均衡
使用您选择的负载平衡策略代理到多个后端:随机(默认)、最少连接、循环、IP 哈希或请求头等等。
3. 下载 Caddy:
① 直接下载:
https://caddyserver.com/download② 一键安装:
curl https://getcaddy.com | bash -s personalbrew install caddy4. 运行 Caddy:
caddy.exe二、Caddy 自动 HTTPS 的使用
1. Caddyfile:
CaddyfileCaddyfilenginx.conf--conf./caddy --conf ../Caddyfile2. 一个简单的 Caddyfile 示例:
3. 启用自动 HTTPS:
启用 HTTPS 的前提,首先是需要是有一台云服务器(IP 开放 80 端口),然后要确保系统的 80 和 443 端口未被其他程序占用。
以上述 Caddyfile 为基础,修改 Caddyfile 配置:
tlsemailemail- 参考资料
4. 默认启用自动 HTTPS:
tlshttps://redir301302redirectStrict-Transport-Security三、Caddy 反向代理服务的使用
反向代理
在计算机网络中,反向代理是代理服务器的一种。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如 Web 服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的 IP 地址,而不知道在代理服务器后面的服务器簇的存在。
简单说明一下概念,内容来源于百度百科,更详细的内容请自行搜索了解。
负载均衡
反向代理可结合负载均衡使用,但负载均衡不是本次讲解的重点,简单说明一下策略,有以下几种负载均衡策略可用:
randomleast_connround_robinfirstip_hashuri_hashheadergraph RL User1((客户端 1)) User2((客户端 2)) User3((客户端 3)) User1 --请求 1--> CaddyServer User2 --请求 2--> CaddyServer User3 --请求 3--> CaddyServer CaddyServer -.响应 1.-> User1 CaddyServer -.响应 2.-> User2 CaddyServer -.响应 3.-> User3 subgraph 反向代理 + 负载均衡 CaddyServer end subgraph 后台服务 WebServer1 WebServer2 WebServer3 end WebServer1 --连接 1--- CaddyServer WebServer2 --连接 2--- CaddyServer WebServer3 --连接 3--- CaddyServer title>反向代理和负载均衡示意图]
1. 反向代理相关配置:
proxy127.0.0.1:8080/app/ example.comHTTPS + 域名proxywebsocketwss2. 负载均衡简单配置(了解):
proxypolicyround_robin四、Caddy 与 Nginx 的简单对比
总而言之就是各有优缺,Nginx 强大而复杂,Caddy 先进而简约,但在某些方尚且面略逊一筹。由于 Nginx 起步较早且用 C 语言开发,故在底层上决定了其某些方面的性能比用 Go 语言开发的年轻 Caddy 相对更高一些,引用一句话就是:
如果说 Nginx 是成功中年人士,则 Caddy 是年轻高富帅。
参考资料:
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=wh4u6zpyhe1d