Express 将请求的子域/主机从GCP负载平衡器转发到云运行
我有一个被几家公司使用的Express应用程序。每个公司都有自己的子域来调用应用程序api,例如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)。我们正试图弄清楚如何获取用户请求的子域(负载平衡器中配置的子域),但该值
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的理解,但我可能完全错了我猜你使用通配符证书,对吗?是的,我们使用通配符证书