跳至主要内容

将 Webhook 发送到私有系统

为了限制您的私有系统暴露于互联网的范围,您可以使用反向代理将 GitHub 的 Webhook 转发到您的私有系统。

关于通过反向代理与私有系统集成

您可能希望将 GitHub Webhook 发送到无法直接从互联网访问的私有系统,例如 CI 系统、工作管理工具和自定义应用。您可以使用反向代理接收来自 GitHub 的 Webhook 有效负载并将其传递到您的私有系统。

反向代理是一种位于客户端和应用程序之间的 Web 服务器。反向代理接收来自客户端的请求并将其转发到应用程序。这可确保互联网上的客户端与底层应用程序之间不会发生直接通信。各种系统都可以充当反向代理,包括

  • Web 服务器,例如 nginx
  • API 网关
  • 免费开源的覆盖网络,例如 OpenZiti
  • 商业入口管理工具,例如 ngrok
  • 免费开源的入口管理工具,例如 zrok

反向代理的配置方式根据您使用的系统而异。

保护反向代理的流量

部署反向代理时,您应遵循反向代理提供商为保护底层代理服务器而推荐的所有做法。此外,您应采取以下步骤以验证只有来自 GitHub 的请求才会转发到您的应用程序。

限制传入的 GitHub Webhook 流量

您应将反向代理配置为仅允许来自用于传递 Webhook 的 GitHub IP 范围子集的 HTTPS POST 请求。这可确保您的反向代理不会处理或转发其他请求。

/meta 端点 返回一个 JSON 对象,其中列出了 GitHub 的 IP 范围。用于传递 Webhook 的 IP 范围列在 hooks 元素中。

验证 Webhook 有效负载

如果您的 Webhook 配置了密钥令牌,则 GitHub 将包含每个 Webhook 有效负载的加密哈希。您应使用此哈希来验证从 GitHub 收到的有效负载,然后再由您的私有系统执行任何操作。有关更多信息,请参阅“验证 Webhook 传递”。

您可以在反向代理或私有系统上实现有效负载验证。