OpenResty Edge 中启用 hCaptcha 只需三步:在全局配置的验证码配置页填入 hCaptcha 的 Sitekey 和 Secret key,然后在页面规则中添加 “Enable hCaptcha” 动作、或将 WAF 的拦截动作设为 hCaptcha 人机验证,最后发布配置即可。hCaptcha 是一种用于保护网站免受恶意软件、自动化脚本和垃圾邮件攻击的第三方服务。

本教程将通过截图演示这两种启用方式,并说明 clearance time 如何控制验证的触发频率。

OpenResty Edge 返回的 hCaptcha 人机验证页面

在 OpenResty Edge 全局配置中设置 hCaptcha 密钥

像往常一样,让我们进入 OpenResty Edge 的 Admin Web 控制台。这是我们控制台的样本部署。每个用户都有自己的本地部署。

OpenResty Edge Admin Web 控制台

在我们为应用启用 hCaptcha 之前,需要先配置 hCaptcha 的 Sitekey 和 Secret key。

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

跳转到全局配置页面。

从顶部菜单进入全局配置页面

进入验证码配置页面。

在全局配置中打开验证码配置页面

hCaptcha 的 Sitekey 和 Secret key 需要从 hCaptcha 的官方网站获得。

OpenResty Edge 验证码配置中的 hCaptcha Sitekey 与 Secret key 输入框

进入 hCaptcha 的官网进行登录或者注册。

在 hCaptcha 官网登录或注册

然后进入网站页面,查看我们的 Sitekey 列表。转到 Sitekey 设置页面。

hCaptcha 网站页面上的 Sitekey 列表

我们可以在这里获取 Sitekey 的详细信息。

hCaptcha Sitekey 设置页面中的 Sitekey 详情

然后我们进入设置页面,查看 Secret key。

打开 hCaptcha 设置页面以获取 Secret key

我们可以在这里获取 Secret key。

hCaptcha 设置页面中显示的 Secret key

输入从 hcaptcha 网站获得的 Sitekey 和 Secret key。

在 OpenResty Edge 中输入 hCaptcha 的 Sitekey 与 Secret key

点击保存。

保存 hCaptcha 验证码配置

现在我们已经配置了 hCaptcha 的 Sitekey 和 Secret key。

hCaptcha 的 Sitekey 与 Secret key 配置完成

通过页面规则动作启用 hCaptcha

现在来为我们的应用配置 hCaptcha。

从全局配置返回应用列表页面

我们继续使用 test-edge.com 域名来演示如何配置 hCaptcha。

在应用列表中搜索 test-edge.com 域名

进入这个应用。

搜索结果中的 test-edge.com 应用

在之前的教程中,我们已经定义了一个上游。

进入该应用的上游页面

这个 my_backend 上游定义了一个后端服务器。

已定义后端服务器的 my_backend 上游

我们也已经定义了一个页面规则。

进入该应用的页面规则页面

在之前的教程中,这个页面规则设置了一个反向代理到我们刚刚看到的上游。

指向 my_backend 上游的反向代理页面规则

现在让我们添加一个新的页面规则来启用 hCaptcha 动作。

新建页面规则以启用 hCaptcha

注意我们没有为这个规则设置任何条件。这意味着该规则将无条件地被触发。

未设置条件的页面规则将无条件触发

添加一个新的动作。

在页面规则中添加新动作

搜索动作 “Enable hCaptcha”。

搜索 Enable hCaptcha 动作

选择 “Enable hCaptcha” 选项。

选择 Enable hCaptcha 选项

当客户端通过验证码验证后,在指定的一段时间之内,OpenResty Edge 将允许来自同一客户端的所有请求,这个时间段被称为 clearance time。hCaptcha 是通过 cookie 记录验证信息的。

Enable hCaptcha 动作的 clearance time 设置

我们将这个时间设置为 10 秒。

将 hCaptcha 的 clearance time 设置为 10 秒

将这个规则置顶,以确保优先执行此规则。这样设置是为了方便我们进行演示。你可以设置成任意的顺序。

新建页面规则的插入位置选项

保存这个规则。

选中置顶规则后创建该页面规则

像往常一样,我们需要发布新的配置来推送我们编辑过的页面规则。

待发布变更提示与发布入口链接

点击这个按钮。

在发布页面发布这条待发布变更

发布!

在确认对话框中点击发布

已经完全同步。

配置已完全同步到所有网关集群和服务器

现在,新的页面规则已经被推送到所有的网关集群和服务器。

OpenResty Edge 网关集群配置同步开始

OpenResty Edge 网关集群配置同步进行中

OpenResty Edge 网关集群配置同步完成

我们的配置变化不需要服务器重载、重启或二进制升级。所以它是非常高效和可扩展的。

架构图:Edge Admin 服务器将配置同步到各节点的本地键值存储,请求处理会话无需重载即可加载新配置

测试 hCaptcha 人机验证

现在来访问 test-edge.com。可以看到,该页面返回 hCaptcha 的验证码页面,而不是我们源站的内容。

访问 test-edge.com 时返回的 hCaptcha 人机验证页面

点击验证。按照指示来选择正确的图片。

hCaptcha 图片选择验证

如果我们选择了不正确的图片,则会有另一组图片出现让我们继续做选择。

选择错误后出现的另一组 hCaptcha 图片

经过验证,现在可以看到该 URI 预期返回的内容。注意我们刚才把 clearance time 设置为 10 秒。这表明我们可以在 10 秒内不使用验证码访问该域名。

通过 hCaptcha 验证后显示的源站内容(OpenResty 欢迎页)

10 秒过后,则需要再次验证。

clearance time 过期后再次出现的 hCaptcha 验证

将 hCaptcha 设为 WAF 拦截动作

除了在动作中设置验证码之外,我们还可以在 WAF 规则中设置验证码。WAF 规则的具体功能可参考在 OpenResty Edge 中启用 WAF 教程。

从发布页面进入应用的页面规则

现在先让我们简单了解一下如何在 WAF 规则中设置 hCaptcha。

打开 hCaptcha 页面规则以编辑其 WAF 部分

启用 WAF。

在页面规则中开启 WAF 部分

这里可以将 block action 设置为 hCaptcha。

页面规则 WAF 部分的 Block Action 设置

选择 “OpenResty Edge gateway server captcha challenge - hCaptcha” 选项。

选择 OpenResty Edge gateway server captcha challenge - hCaptcha 选项

hCaptcha 已被选为 WAF 拦截动作

和之前设置动作的时候一样,需要在这里设置一个 clearance time。这里我就不详细演示了。详情可以查看与 WAF 规则相关的视频。

hCaptcha WAF 拦截动作的 clearance time 设置

顺便说一下,我们也支持 OpenResty Edge 的内置验证码服务,它直接由网关服务器返回验证页面。你可以在内置验证码教程中详细了解这个功能。

关于 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. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:

我们的微信公众号

翻译

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