如何解决如何从 Firebase 托管重写发送的请求中获取 Cloud Run 服务器上的主机名?
我需要在我的网络应用程序上执行 SSR。而且由于它是一个国际网站,我需要知道请求该网站的域(主机名),以便我可以用适当的语言为用户呈现。
示例:
https://www.mydomain.co.uk // WILL RENDER IN ENGLISH
https://www.mydomain.es // WILL RENDER IN SPANISH
这里是设置
- Cloud Run docker Node.js 容器上的快速服务器
- Firebase 托管将重写对 Cloud Run 容器的所有请求
以下是 Firebase 重写流量的方式:
firebase.json
"rewrites": [
{
"source": "**","run": {
"serviceId": "my-server-id","region": "us-central1"
}
}
]
一切正常。但我注意到所有请求都使用以下主机名到达我的 Cloud Run 服务器:
-
req.hostname === "https://my-server-id-on-cloud-run.run.app"
,这是我的服务器服务的默认 Cloud Run 网址。
我注意到 Firebase Hosting 将我的实际域名添加到以下标头中:
x-forwarded-host: "https://www.mydomain.co.uk" OR "https://www.mydomain.es
这是读取我的域的正确标头吗?我没有找到有关此主题的任何文档。
如果用户使用我应用的 Firebase 默认网址 (web.app OR firebaseapp.com
) 或通过连接的自定义域访问我的网站,我可以指望 x-forwarded-host
标头 那里,对吗?
是否会出现x-forwarded-host
包含多个 URL 的情况?就像它发生在带有 IP 的 x-forwarded-for
中一样?
参考文献:
- https://firebase.google.com/docs/hosting/cloud-run
- https://firebase.google.com/docs/hosting/full-config#rewrite-cloud-run-container
PS:我注意到,如果我直接从 Cloud Run 默认 url .run.app
访问我的 cloud run 服务器,x-forwarded-for
标头不存在,这使得考虑到这是一个直接的请求,而不是重写的请求。
解决方法
根据此doc,
- 鉴于您分享的所有专业人士以及此标题可能是最佳选择:i>
-
X-Forwarded-Host
标头可用于确定最初使用的是哪个主机。 - 此标头用于调试、统计和生成与位置相关的内容。
-
语法是:
X-Forwarded-Host: <host>
,指令是:
<host>
The domain name of the forwarded server.
这意味着该标题中的 moew 值不能超过 1。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。