Skip to main content

将 Webhook 传送到专用系统

为了限制将专用系统公开到 Internet,可以使用反向代理将 Webhook 从 GitHub 转发到专用系统。

关于通过反向代理与专用系统集成

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

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

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

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

保护到反向代理的流量

部署反向代理时,应遵循反向代理提供商建议的所有做法来保护底层代理服务器。 此外,应执行以下步骤来验证是否仅将来自 GitHub 的请求转发到应用程序。

将入站流量限制到 GitHub Webhook

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

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

验证 Webhook 有效负载

如果 Webhook 配置了机密令牌,GitHub 将包含每个 Webhook 有效负载的加密哈希。 在专用系统执行任何操作之前,应使用此哈希验证从 GitHub 接收的有效负载。 有关详细信息,请参阅“验证 Webhook 交付”。

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