【问题标题】:Forward requested subdomain/host from GCP Load Balancer to Cloud Run将请求的子域/主机从 GCP 负载均衡器转发到 Cloud Run
【发布时间】:2021-05-10 00:13:03
【问题描述】:

我有一个被多家公司使用的 Express 应用。每个公司都有自己的子域调用app api,如company1.mydomain.comcompany2.mydomain.com。在 Express 中,我们读取子域的值以确定我们必须为该公司执行的自定义操作。

我们正在使用带有 GCP 负载均衡器的 Cloud Run 将此应用程序移至 GCP,并在后者上设置所有子域。我们现在正在尝试读取子域,但它包含 Cloud Run URL (xxxxx.a.run.app) 的子域值。我们正在尝试弄清楚如何获取用户请求的子域(在负载均衡器中配置的那个),但该值似乎没有转发到 Cloud RUN。

是否有我们遗漏的设置或有助于我们从 Cloud Run 读取子域值的设置?

PD:我们尝试使用负载均衡器的自定义标头,但没有与子域值相关的选项

PD2:我们还尝试检查其他标头(包括 X-Somethingxx GCP 标头),但一无所获

【问题讨论】:

  • 您检查了标题吗?你有x-forwarded-host 标头值吗?
  • @guillaumeblaquiere 不,我没有。我可以看到的x- 标头是:x-cloud-trace-contextx-forwarded-forx-forwarded-protox-request-id。它们都不包含子域
  • 您在负载均衡器上使用 HTTPS 协议吗?
  • @guillaumeblaquiere 是的。我们有一个 HTTPS LB 和 HTTP LB 重定向到 HTTPS。

标签: express google-cloud-platform google-cloud-run gcp-load-balancer


【解决方案1】:

我找到了解决方案。它基于我写的a recent article

解决办法是:

  • 创建 HTTPS 负载平衡器
  • 定义一个调用 run.app 的互联网 NEG
  • 在后端,使用此 NEG 并添加自定义标头主机,其值为您的 Cloud Run 服务的完全限定 URL xxxxx.a.run.app(如我的文章中所述)
  • 添加另一个自定义标题(您想要的,例如x-forwarded-host),其值为{tls_sni_hostname}

【讨论】:

  • 我已经使用 {tls_sni_hostname} 自定义标头做了类似的事情。这个值的问题在于它是在握手过程中设置的,并且它保持相同的值,直到您需要对另一个证书/url 进行新的握手。所以就像我在原帖中说的那样,有几家公司和他们的客户使用我们的 api (company1.mydomain.comcompany2.mydomain.com)。所有子域都使用相同的证书,所以如果客户请求company1.mydomain.com,则 SNI 设置为该 URL,如果那么相同的客户呼叫company2.mydomain.com SNI 将保持company1.mydomain.com
  • 那是因为不需要新的握手。这可以通过为每个域使用不同的证书来解决,但对我们来说这是不可行的。这就是我对 SNI 的理解,但我可能完全错了
  • 我猜你使用的是通配符证书,对吗?
  • 是的,我们使用通配符证书
猜你喜欢
  • 1970-01-01
  • 2016-11-12
  • 2013-12-09
  • 2023-02-22
  • 1970-01-01
  • 2021-05-16
  • 2018-03-14
  • 2022-01-19
相关资源
最近更新 更多