caddy搭建反向代理
本指南将向您展示如何快速搭建一个生产级的反向代理,无论是否使用 HTTPS。
前提条件:
-
基本的终端/命令行操作技能
-
caddy
命令已在您的系统路径(PATH)中 -
一个正在运行的后端服务,用于代理
本教程假设您有一个后端 HTTP 服务运行在 127.0.0.1:9000
。以下命令适用于 Linux 系统,但相同的原则也适用于其他操作系统。
您可以不使用配置文件来运行一个简单的反向代理,也可以使用配置文件以获得更多的灵活性和控制能力。
本指南将向您展示如何快速搭建一个生产级的反向代理,无论是否使用 HTTPS。
前提条件:
基本的终端/命令行操作技能
caddy
命令已在您的系统路径(PATH)中
一个正在运行的后端服务,用于代理
本教程假设您有一个后端 HTTP 服务运行在 127.0.0.1:9000
。以下命令适用于 Linux 系统,但相同的原则也适用于其他操作系统。
您可以不使用配置文件来运行一个简单的反向代理,也可以使用配置文件以获得更多的灵活性和控制能力。
本指南将向您展示如何快速搭建一个生产就绪的静态文件服务器。
先决条件:
基本的终端/命令行技能
caddy
已添加到您的 PATH 中
包含您网站的文件夹
有两种简单的方法可以快速启动文件服务器。
欢迎来到 Caddy!本教程将探索使用 Caddy 的基础知识,并帮助你从宏观上熟悉它。
目标:
🔲 运行守护进程
🔲 尝试 API
🔲 给 Caddy 提供配置
🔲 测试配置
🔲 创建 Caddyfile
🔲 使用配置适配器
🔲 从初始配置开始
🔲 比较 JSON 和 Caddyfile
🔲 比较 API 和配置文件
🔲 在后台运行
🔲 零停机时间配置重载
前提条件:
基本的终端/命令行技能
基本的文本编辑器技能
caddy
和 curl
在你的 PATH 中
以往在网站部署时第一时间想到的就是用nginx,不过总觉得nginx配置繁琐不太方便,之前在学云原生课的时候了解到现在有一款用go写的反向代理软件caddy可以替代nginx,现在就想了解学习一下怎么使用。
Caddy 是一个功能强大且可扩展的平台,用于托管您的网站、服务和应用程序,它使用 Go 语言编写。如果您是 Caddy 的新手,那么您搭建 Web 服务的方式即将改变。
大多数人将 Caddy 用作 Web 服务器或代理,但其核心是,Caddy 是一个“服务器的服务器”。凭借所需的模块,它可以承担任何长期运行进程的角色!
Caddy 的配置既动态又可通过其 API 导出。尽管不需要配置文件,但您仍然可以使用它们;大多数人配置 Caddy 的首选方式是使用 Caddyfile。配置文档的格式可以通过配置适配器呈现多种形式,但 Caddy 的原生配置语言是 JSON。
本页面介绍了在您的系统上安装 Caddy 的各种方法。
官方支持的安装方法:
静态二进制文件
Debian、Ubuntu、Raspbian 软件包
Fedora、RedHat、CentOS 软件包
Arch Linux、Manjaro、Parabola 软件包
Docker 镜像
社区维护的安装方法:
以下内容假设您已经安装了 Faiss。我们提供了 C++ 和 Python 的代码示例。您可以直接复制粘贴这些代码,或者从 Faiss 发行版的 tutorial/
子目录中运行它们。
Faiss 处理固定维度 (d) 的向量集合,通常维度在几十到几百之间。这些集合可以存储在矩阵中。我们假设采用行主序存储,即第 (i) 个向量的第 (j) 个分量存储在矩阵的第 (i) 行、第 (j) 列。Faiss 只使用 32 位浮点矩阵。
我们需要两个矩阵:
Faiss 是一个用于高效相似性搜索和密集向量聚类的库。它包含的算法可以在任意大小的向量集合中进行搜索,甚至包括那些可能无法完全放入 RAM 的数据集。此外,它还提供了用于评估和参数调整的支持代码。Faiss 是用 C++ 编写的,并且为 Python(2 和 3 版本)提供了完整的包装器。其中一些最有用的算法还实现了 GPU 加速。Faiss 主要由 Meta AI Research 开发,并得到了外部贡献者的帮助。
给定一组维度为 (d) 的向量 ({x_1, \dots, x_n}),Faiss 会在 RAM 中构建一个数据结构。在构建完该结构后,当给定一个新的维度为 (d) 的向量 (x) 时,它会高效地执行以下操作:
UUID(Universically Unique Identifier)是一个128位的标识符,通常表示为32个十六进制字符,由连字符分隔为五段,格式为 8-4-4-4-12
(例如:123e4567-e89b-12d3-a456-426614174000
)。其各段的含义取决于 版本
和 变体
,但通用结构如下:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | | | | | | | | | | | └─ 节点/随机数据(12字符) | | | | └─ 变体标识(4字符) | | | └─ 时间戳高位/哈希数据(4字符) | | └─ 版本标识(4字符) | └─ 时间戳中段(4字符) └─ 时间戳低位(8字符)
UUID(Universally Unique Identifier),通用唯一识别码,是一种由数字和字母组成的128位标识符,通常表示为32个十六进制数字,中间用连字符分隔成5段,形式为8-4-4-4-12,例如:550e8400-e29b-41d4-a716-446655440000。每段的含义如下:
第1段(8位)
含义
时间戳的一部分,它表示UUID生成的大致时间信息。更具体地说,是从1582年10月15日00:00:00 UTC到UUID生成时刻所经过的时间的低32位。
作用
在一定程度上反映了UUID生成的先后顺序,对于需要按照时间顺序处理或排序UUID的场景有一定的参考意义。
第2段(4位)
含义
时间戳的一部分,是从1582年10月15日00:00:00 UTC到UUID生成时刻所经过时间的高16位中的一部分,用于进一步细化时间信息。
作用
与第1段的时间戳信息结合,能更精确地表示UUID的生成时间,有助于在分布式系统中区分在相近时间生成的UUID。
第3段(4位)
含义
版本号。目前UUID有5个版本,不同版本的UUID生成方式和特点有所不同。该段数字用于标识UUID的版本号,例如,值为4表示是基于随机数生成的UUID版本4。
作用
可以让系统或应用程序根据不同的版本来确定如何解析和使用UUID,也有助于在不同的系统或应用之间进行兼容性处理。
第4段(4位)
含义
变体(Variant)。用于标识UUID的变体,主要是为了兼容不同的UUID生成规范和实现。目前常见的变体有两种,一种是遵循RFC 4122规范的变体,另一种是用于Microsoft的GUID(Globally Unique Identifier,与UUID类似)的变体。
作用
帮助系统或应用程序确定UUID的兼容性和处理方式,确保在不同的环境中能够正确地解析和使用UUID。
第5段(12位)
含义
通常是基于随机数或特定的命名空间和名称生成的唯一标识符的剩余部分,它提供了UUID的主要唯一性来源。
作用
保证了UUID在全球范围内的唯一性,即使在同一时间生成多个UUID,也能通过这部分内容确保它们的唯一性。
许多Go项目都使用Viper构建,包括:
Hugo
EMC RexRay
Imgur的Incus
Nanobox
/
Nanopack
Docker Notary
BloomApi
doctl
Clairctl
Mercure
Meshery
Bearer
Coder
Vitess
1 | go get github.com/spf13/viper |