如何从 Firebase 托管重写发送的请求中获取云 运行 服务器上的主机名?
How to get hostname on a Cloud Run server from a request sent from a Firebase Hosting rewrite?
我需要在我的网络应用程序上执行 SSR。由于它是一个国际网站,我需要知道请求该网站的域(主机名),以便我可以为用户呈现适当的语言。
示例:
https://www.mydomain.co.uk // WILL RENDER IN ENGLISH
https://www.mydomain.es // WILL RENDER IN SPANISH
这是设置
- 云上的 express 服务器 运行 docker Node.js 容器
- 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 托管将我的实际域名添加到以下 header:
x-forwarded-host: "https://www.mydomain.co.uk" OR "https://www.mydomain.es
这是正确的 header 来读取我的域名吗?我没有找到关于此主题的任何文档。
如果用户使用我应用的 Firebase 默认 urls (web.app OR firebaseapp.com
) 或通过连接的自定义域访问我的网站,我可以指望 x-forwarded-host
header 会一直存在,对吗?
会不会出现 x-forwarded-host
包含 多个 URL 的情况?就像它发生在 x-forwarded-for
与 IPs?
参考文献:
- https://firebase.google.com/docs/hosting/cloud-run
- https://firebase.google.com/docs/hosting/full-config#rewrite-cloud-run-container
PS: 我注意到如果我直接从云 运行 默认 [=89] 访问我的云 运行 服务器=] .run.app
,x-forwarded-for
header 不存在,这是有道理的,因为它是直接请求,而不是重写的请求。
据此doc,
- 这 header 可能是最好的选择,考虑到您分享的所有优点加上:
X-Forwarded-Host
header 有助于确定最初使用的主机。
- 此header用于调试、统计和生成location-dependent内容。
- 语法是:
X-Forwarded-Host: <host>
,指令是:
<host>
The domain name of the forwarded server.
这意味着您不能在 header 中拥有超过 1 个值。
我需要在我的网络应用程序上执行 SSR。由于它是一个国际网站,我需要知道请求该网站的域(主机名),以便我可以为用户呈现适当的语言。
示例:
https://www.mydomain.co.uk // WILL RENDER IN ENGLISH
https://www.mydomain.es // WILL RENDER IN SPANISH
这是设置
- 云上的 express 服务器 运行 docker Node.js 容器
- 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 托管将我的实际域名添加到以下 header:
x-forwarded-host: "https://www.mydomain.co.uk" OR "https://www.mydomain.es
这是正确的 header 来读取我的域名吗?我没有找到关于此主题的任何文档。
如果用户使用我应用的 Firebase 默认 urls (web.app OR firebaseapp.com
) 或通过连接的自定义域访问我的网站,我可以指望 x-forwarded-host
header 会一直存在,对吗?
会不会出现 x-forwarded-host
包含 多个 URL 的情况?就像它发生在 x-forwarded-for
与 IPs?
参考文献:
- https://firebase.google.com/docs/hosting/cloud-run
- https://firebase.google.com/docs/hosting/full-config#rewrite-cloud-run-container
PS: 我注意到如果我直接从云 运行 默认 [=89] 访问我的云 运行 服务器=] .run.app
,x-forwarded-for
header 不存在,这是有道理的,因为它是直接请求,而不是重写的请求。
据此doc,
- 这 header 可能是最好的选择,考虑到您分享的所有优点加上:
X-Forwarded-Host
header 有助于确定最初使用的主机。- 此header用于调试、统计和生成location-dependent内容。
- 语法是:
X-Forwarded-Host: <host>
,指令是:
<host>
The domain name of the forwarded server.
这意味着您不能在 header 中拥有超过 1 个值。