跳至主要内容

向私有系统发送 Webhook

为了限制私有系统在互联网上的暴露,你可以使用反向代理将 Webhook 从 GitHub 转发到私有系统。

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

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

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

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

反向代理的配置方式因所使用的系统而异。

保护反向代理流量

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

将入站流量限制到 GitHub Webhook

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

/meta 端点返回列出 GitHub IP 范围的 JSON 对象。用于发送 Webhook 的 IP 范围列在 hooks 元素中。

验证 Webhook 有效负载

如果 Webhook 配置有密钥令牌,GitHub 将包含每个 Webhook 有效负载的加密哈希。在私有系统采取任何操作之前,你应使用此哈希验证从 GitHub 接收的有效负载。有关更多信息,请参阅“验证 Webhook 发送”。

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