Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Express 将请求的子域/主机从GCP负载平衡器转发到云运行_Express_Google Cloud Platform_Google Cloud Run_Gcp Load Balancer - Fatal编程技术网

Express 将请求的子域/主机从GCP负载平衡器转发到云运行

Express 将请求的子域/主机从GCP负载平衡器转发到云运行,express,google-cloud-platform,google-cloud-run,gcp-load-balancer,Express,Google Cloud Platform,Google Cloud Run,Gcp Load Balancer,我有一个被几家公司使用的Express应用程序。每个公司都有自己的子域来调用应用程序api,例如company1.mydomain.com,company2.mydomain.com。在Express中,我们读取子域的值以确定必须为该公司执行的自定义操作 我们正在使用云运行和GCP负载均衡器将此应用程序移动到GCP,并在后者上设置所有子域。我们正在尝试读取子域,但它包含云运行URL的子域值(xxxxx.a.Run.app)。我们正试图弄清楚如何获取用户请求的子域(负载平衡器中配置的子域),但该值

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

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

是否有我们缺少的设置或帮助我们从Cloud Run读取子域值的内容

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


PD2:我们还尝试检查其他标题(包括
X-Somethingxx
GCP标题),但没有发现任何内容

我找到了解决方案。这是基于我写的

解决办法是:

  • 创建HTTPS负载平衡器
  • 定义一个调用run.app的internet NEG
  • 在后端,使用此NEG并添加自定义头主机,其值为云运行服务的完全限定URL
    xxxxx.a.Run.app
    (如本文所述)
  • 添加另一个值为
    {tls\u sni\u hostname}

是否检查了收割台?你有
x-forwarded-host
标题值吗?@guillaumeblaquiere没有,我没有。我可以看到的
x-
标题是:
x-cloud-trace-context
x-forwarded-for
x-forwarded-proto
x-request-id
。它们都不包含子域您在负载平衡器上使用HTTPS协议吗?@guillaumeblaquiere是。我们有一个HTTPS LB和HTTP LB重定向到HTTPS。我已经使用
{tls\u sni\u hostname}
自定义头做了类似的事情。此值的问题在于,它是在握手过程中设置的,并且在您需要为另一个证书/url进行新握手之前,它保持相同的值。正如我在原始帖子中所说,一些公司及其客户使用我们的api(
company1.mydomain.com
company2.mydomain.com
)。所有子域都使用相同的证书,因此,如果客户请求
company1.mydomain.com
SNI设置为该URL,并且如果相同的客户呼叫
company2.mydomain.com
SNI将保持
company1.mydomain.com
,这是因为不需要新的握手。这可以通过为每个域使用不同的证书来解决,但对我们来说这是不可行的。这就是我对SNI的理解,但我可能完全错了我猜你使用通配符证书,对吗?是的,我们使用通配符证书