在 OpenResty Edge 中,你完全可以通过 Admin Web 控制台搭建反向代理和负载均衡器——无需重载、重启服务器或升级二进制。本教程带你走完整个流程:创建应用、定义指向后端的上游、配置一条采用轮询策略的页面规则、将配置发布到每一个网关节点,并用 curl 验证。

OpenResty Edge 反向代理和负载均衡概览

我们在一个集中的地方管理所有的网关服务器节点及其配置,即 Edge Admin 网络控制台。

用于管理网关节点和配置的 OpenResty Edge Admin 控制台

在 Edge Admin 控制台中创建示例应用

让我们进入 OpenResty Edge 的网络控制台。这是我们控制台的一个示例部署。每个用户都可以有自己的部署。

用我们的用户名和密码登录。

OpenResty Edge Admin 登录页面

其他认证方式也可配置。 现在登录。

登录 OpenResty Edge Admin 控制台

我们现在到了应用列表页面。已经有很多我们之前创建的应用。每个应用程序对应同一网关中的虚拟主机或虚拟服务器。

在这里,我们将通过点击“新建应用程序”按钮来创建一个新的应用。

Edge Admin 控制台中的应用列表页面

就创建一个 HTTP 类型的。这是默认的。

在 OpenResty Edge 中创建新的 HTTP 应用

我们为这个应用分配一个域名 test-edge.com

为新应用分配 test-edge.com 域名

我们可以添加更多的域名,包括通配符域名。

为应用添加更多域名(包括通配符域名)

在这个例子中,我们只关心 80 端口。

为 HTTP 应用设置 80 端口

让我们来创建这个应用!

确认创建新的 HTTP 应用

现在我们已进入这个新的应用。它是空的。

为后端添加反向代理上游

让我们进入上游页面。

新建 Edge 应用中的上游页面

显然,我们目前还没有定义任何上游。

点击“新建上游”按钮,为我们的后端服务器创建一个新的上游。

为后端服务器创建新的上游

给这个上游取个名字,比如说,my_backend

将反向代理上游命名为 my_backend

为了简单起见,我们这里只用 HTTP 协议。

为上游选择 HTTP 协议

我们最终可能还是会想启用 HTTPS 协议。

将上游切换为 HTTPS 的选项

这里我们需要后台服务器的 IP 地址。

上游的后端服务器 IP 地址字段

我们已经在这个 IP 地址 54.213.103.191 准备了一个后台服务器的样本。

返回默认 OpenResty 主页的示例后端服务器

它只是简单地返回开源 OpenResty 服务器软件的默认主页。

后端可以是任何使用 HTTP 协议来通信的软件。

示意图:OpenResty Edge 可反向代理到任意 HTTP 后端

现在我们可以填写后台服务器的主机字段了。

在上游表单中填写后端服务器主机

保持 80 端口不变。

为上游后端保持 80 端口不变

未来我们可以通过点击“添加新的上游服务器”按钮在这个上游中添加更多的服务器。

向上游添加更多后端服务器

现在保存一下这个上游。

保存 my_backend 上游

我们可以看到这个 my_backend 上游已经有了。

上游页面中列出的 my_backend 上游

为上游添加轮询页面规则

现在让我们创建一个新的页面规则来实际利用这个上游。点击左侧栏的上游链接。

Edge 应用中的页面规则页面

我们目前没有定义任何页面规则。

创建一个新的页面规则。点击“新建规则”按钮。

创建新的页面规则

对于这个页面规则,我们不指定条件。这样,它将适用于所有传入的请求。

无条件的页面规则,适用于所有传入请求

我们可以添加条件将该代理页面规则限制在某些请求上。

可选条件:将反向代理页面规则限制在特定请求上

我们先禁用条件。

禁用页面规则条件

我们在这里添加一个代理目标。

为页面规则添加代理目标

选择一个上游。

选择上游作为代理目标

这里有我们新创建的上游。

可供选择的新建 my_backend 上游

我们也有一些预先定义的全局上游。它们可以被所有的应用程序复用,包括这个应用。

可跨应用复用的预定义全局上游

这里先选择我们的 my_backend 上游。

选择 my_backend 上游作为代理目标

我们的上游只有一台服务器。所以负载均衡策略在这里并不重要。

上游的负载均衡策略选择(默认轮询)

我们就保持默认的轮询策略。

我们可能还想启用响应的缓存。我们将在另一个视频中介绍这个话题。

反向代理页面规则的可选响应缓存

最后,真正地创建这条规则。

创建反向代理页面规则

可以看到我们的代理页面规则已经列在页面规则列表中了。

页面规则页面中列出的新反向代理页面规则

将反向代理配置发布到每一个网关节点

最后一步是进行新的配置发布。它将把我们尚未完成的更改推送到所有的网关服务器上。

待发布的配置变更

我们可以点击此处的链接去进行发布。

开始新的配置发布

我们有机会检查我们的变更,然后再推送出去。这是我们的第一个变更。

发布前查看第一个待发布变更

这是我们增加的 my_backend 上游。

显示新增 my_backend 上游的差异

这是我们的第二个变更。

发布前查看第二个待发布变更

显示新反向代理页面规则的差异

这的确是我们的代理页面规则。

现在我们向所有的网关服务器发布配置更新。

将反向代理配置发布到每一台网关服务器

发送!

确认配置发布

我们可以实时观察配置同步进度。它被推送到整个网关网络。

网关网络中配置同步的实时进度

现在已经完全同步了。我们可以看到,这个示例部署在网关网络中有 13 台服务器。

我们在整个网络中进行增量的配置同步。

我们在请求粒度上实时更新配置。应用级别的配置更改都不需要服务器重载、重启或二进制升级。所以,即使你有很多不同的用户进行频繁的发布,它的可扩展性也很强。

示意图:OpenResty Edge 网关网络中增量的、请求级别的配置同步

测试

我们也可以按集群来检查所有的网关服务器。

Edge Admin 控制台中按集群分组的网关服务器

这是我们在全球的样例部署。

在全球部署网关节点的 OpenResty Edge 示例部署

我们的用户可以自由地在任何地方部署他们的网关服务器,或者跨越不同的云和托管服务。

示意图:跨多个云和地区的 OpenResty Edge 网关节点

本列显示各网关服务器的配置同步状态。

各网关服务器配置同步状态列

我们可以选择旧金山附近的一个网关服务器来测试.

测试旧金山附近的一台网关服务器

它的公共 IP 地址是这个。

旧金山网关节点的公共 IP 地址

我们直接复制这个 IP 地址来测试这个服务器。

在终端上,我们可以使用 curl 来测试这个旧金山网关服务器。

curl -sS -H 'Host: test-edge.com' 'http://138.68.231.133/' | less

带 Host 请求头、指向旧金山网关节点的 curl 命令

请注意,我们指定了 Host 请求头。这是因为同一台服务器要为许多不同的虚拟主机服务。

发送请求。

curl 响应显示经 Edge 代理的默认 OpenResty 主页

结果和预期一样!我们得到了默认的 OpenResty 主页,就像直接访问后台服务器一样。

我们也可以通过 curl-I 选项检查响应头。

curl -I -H 'Host: test-edge.com' 'http://138.68.231.133/'

OpenResty Edge 网关返回的响应头

有一些响应头是由 OpenResty Edge 网关软件生成的。

另外,我们也可以在本地的 /etc/hosts 文件中将 IP 地址绑定到主机名。那么我们就可以直接将网页浏览器指向这个域名了。

cat /etc/hosts

本地 /etc/hosts 文件将 test-edge.com 映射到网关节点 IP

在真实的设置中,我们应该将网关服务器的 IP 地址添加到我们的 DNS 名称服务器中。

dig test-edge.com

这里我们还没有配置这个域名的 DNS 记录。我们将在另一个视频中演示。

dig test-edge.com 输出显示尚未配置 DNS 记录

OpenResty Edge 也可以同时作为一个权威的 DNS 服务器网络。

OpenResty Edge 也可作为权威 DNS 网络

当然,这是可选的。用户仍然可以选择使用第三方 DNS 名称服务器。这就是我今天要分享的内容。

在 OpenResty Edge 中使用第三方 DNS 服务器是可选的

常见问题

如何在 OpenResty Edge 的 Admin Web 控制台中搭建反向代理?

创建一个应用(即虚拟主机),添加一个包含后端 IP 和端口的上游,再添加一条将流量代理到该上游的页面规则,然后发布即可。整个过程无需服务器重载、重启或二进制升级。

OpenResty Edge 中的上游(upstream)是什么?

上游是反向代理将流量转发到的一组具名后端服务器。本教程中我们创建了只含一台 80 端口后端的 my_backend,但你之后可以添加更多服务器,Edge 会在它们之间做负载均衡。

OpenResty Edge 如何将新的反向代理配置推送到每一个网关节点?

创建好应用、上游和页面规则后,点击发布。Edge 会在整个网关网络中进行增量的、请求级别的配置同步——无需重载、重启或二进制升级。在这里展示的示例部署中,此次发布会传播到全部 13 台网关服务器。

如何测试反向代理是否生效?

curl 带上应用的 Host 请求头指向任意网关节点的公共 IP,例如 curl -sS -H 'Host: test-edge.com' 'http://<节点-IP>/'。你应当看到与直接访问后端相同的响应——在本教程中即默认的 OpenResty 主页。

OpenResty Edge 负载均衡系列相关阅读

了解全局服务器负载均衡(GSLB)如何在多个地区之间分发流量、如何用粘性 Cookie 让用户会话保持在同一台后端,或如何无需修改 nginx 配置即可代理 TCP 服务

关于 OpenResty Edge

OpenResty Edge 是一款专为微服务和分布式流量架构设计的全能型网关软件,由我们自主研发。它集流量管理、私有 CDN 构建、API 网关、安全防护等功能于一体,帮助您轻松构建、管理和保护现代应用程序。OpenResty Edge 拥有业界领先的性能和可扩展性,能够满足高并发、高负载场景下的苛刻需求。它支持调度 K8s 等容器应用流量,并可管理海量域名,轻松满足大型网站和复杂应用的需求。

如果你喜欢这个教程,请订阅这个博客网站和我们的 YouTube 频道B 站频道。谢谢!

关于作者

章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。

章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJITGDBSystemTapLLVM、Perl 等,并编写过 60 多个开源软件库。

关注我们

如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:

我们的微信公众号

翻译

我们提供了英文版原文和中译版(本文) 。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!