Node.js 如何从Firebase主机重写发送的请求中获取云运行服务器上的主机名?

Node.js 如何从Firebase主机重写发送的请求中获取云运行服务器上的主机名?,node.js,firebase,firebase-hosting,google-cloud-run,Node.js,Firebase,Firebase Hosting,Google Cloud Run,我需要在我的web应用程序上进行SSR。由于它是一个国际网站,我需要知道请求该网站的域(主机名),以便我可以为用户提供适当的语言 例如: https://www.mydomain.co.uk // WILL RENDER IN ENGLISH https://www.mydomain.es // WILL RENDER IN SPANISH 这是设置 云运行docker Node.js容器上的express服务器 Firebase主机将重写对云运行容器的所有请求 以下是Firebas

我需要在我的web应用程序上进行SSR。由于它是一个国际网站,我需要知道请求该网站的域(主机名),以便我可以为用户提供适当的语言

例如:

https://www.mydomain.co.uk // WILL RENDER IN ENGLISH
https://www.mydomain.es    // WILL RENDER IN SPANISH
这是设置

  • 云运行docker Node.js容器上的express服务器
  • Firebase主机将重写对云运行容器的所有请求
以下是Firebase如何重写流量:

firebase.json

"rewrites": [
      {
        "source": "**",
        "run": {
          "serviceId": "my-server-id",
          "region": "us-central1"
        }
      }
    ]
很好用。但我注意到,所有请求都通过以下主机名到达我的云运行服务器:

  • req.hostname==”https://my-server-id-on-cloud-run.run.app“
    ,这是我的服务器服务的默认云运行url
我注意到Firebase主机将我的实际域名添加到以下标题中:

  • x-forwarded-host:https://www.mydomain.co.uk“或”https://www.mydomain.es
这是读取我的域的正确标题吗?我没有找到有关此主题的任何文档

如果用户使用我的应用程序的Firebase默认URL(
web.app或firebaseapp.com
)或通过连接的自定义域访问我的网站,我可以相信
x-forwarded-host
标题将始终存在,对吗?

是否会出现
x-forwarded-host
包含多个URL的情况?就像在使用IPs的网络中一样

参考资料:


PS:我注意到,如果我直接从cloud run默认url
.run.app
点击我的cloud run服务器,那么
x-forwarded-for
头就不存在了,这很有意义,因为它是一个直接请求,而不是重写的请求。

根据这一点

  • 考虑到您分享的所有优点,此标题可能是最佳选择:
    • X-Forwarded-Host
      头用于确定最初使用的主机
    • 此标头用于调试、统计和生成与位置相关的内容
  • 语法是:
    X-Forwarded-Host:
    ,指令是:
  • 
    转发服务器的域名。
    
    这意味着该标头中的moew值不能小于1

    <host>
    The domain name of the forwarded server.