Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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
配置类似Firebase的反向代理托管解决方案_Firebase_Proxy_Google Cloud Functions_Reverse Proxy_Firebase Hosting - Fatal编程技术网

配置类似Firebase的反向代理托管解决方案

配置类似Firebase的反向代理托管解决方案,firebase,proxy,google-cloud-functions,reverse-proxy,firebase-hosting,Firebase,Proxy,Google Cloud Functions,Reverse Proxy,Firebase Hosting,这就是我目前拥有的 domain.com -> website A with its own firebase host (domain.firebase.com) me.domain.com -> website B with its own firebase host (domain-me.firebase.com) 这并不难设置,只是多个子域重定向到不同的Firebase主机。现在,我想要的是一个反向代理,它接受一个请求,并且可以选择将流量路由到各个服务器,同时将客户端UR

这就是我目前拥有的

domain.com ->  website A with its own firebase host (domain.firebase.com)
me.domain.com -> website B with its own firebase host (domain-me.firebase.com)
这并不难设置,只是多个子域重定向到不同的Firebase主机。现在,我想要的是一个反向代理,它接受一个请求,并且可以选择将流量路由到各个服务器,同时将客户端URL仅保留在domain.com的主域上。我不确定Firebase是否可以实现这一点,因为有大量的NGINX实现示例,但基本上,我希望:

domain.com/ ->  website A with its own firebase host (domain.firebase.com)
domain.com/me -> website B with its own firebase host (domain-me.firebase.com)
Firebase有非常复杂的重定向选项,但重定向也会覆盖客户端URL。因此,通过重定向,客户端将看到domain me.firebase.com,而不是domain.com/me,这不是我想要的

据我所知,我可以使用Firebase云函数作为中间件,并让它根据需要为任一站点提供服务。然而,这引入了很多延迟,因为云功能和Firebase托管的网站都有冷启动的预热时间


不给我一个完整和详细的答案是完全可以的,我真的只是想知道这是否可以开始,以及我在哪里可以找到相关的资源。谢谢

与和的集成几乎是您唯一的选择。配置中没有任何东西可以让您直接代理您的请求到其他端点,而不是间接通过。

回答我自己的问题,并基于Doug关于使用Cloud Run的回答。有一种快速、无痛的方法可以用2个应用程序设置一个类似反向代理的实现。为此:

1) 生成两个应用程序,并将它们放在单独的文件夹中,例如文件夹A和文件夹B。您只需要应用程序的生成文件夹,不需要源代码。

2) 在文件夹a和B的根目录下创建新的Express应用程序

3) 让Express使用app.get管理路由,并使用res.sendFile返回服务文件

4) 容器化整个Express应用程序根据Google的教程,您可以忽略示例应用程序,因为您的新Express应用程序就是该应用程序

5) 上传到云作为新服务运行。请记住,虽然Google Tut没有指定,但您需要授予用户上传到存储桶的权限。你需要这个命令
gsutil iam ch user:[用户]:objectViewer gs://us.artifacts.[项目名称].appspot.com
如果有多个项目,请确保使用命令
gcloud config set project[project name]
切换到当前项目

6) 使用Google域映射映射到您的域,因此
domain.com

您必须使用域映射,因为Cloud Run使用的URL是短暂的,因为它没有服务器

您的文件夹结构应该类似于

my-awesome-project
    index.js <- Express app and Docker entry point
    /package.json <- for your Express app
    /A
    /B
    /Dockerfile
    /node_modules

相反,在子域上设置应用程序的方式基本相同。使用步骤4对每个应用程序进行容器化,然后使用Google domain Mapping分别映射每个域。

感谢您的回复。我知道我说过我不介意答案是否完整,但我知道你在Firebase团队工作。首先,我想澄清我读到的内容。简言之,我将当前托管的两个站点作为容器化图像上传到Cloud Run(当它将它们部署到用户时,基本上充当Firebase托管),然后我使用Firebase Cloud功能将图像路由到用户,对吗?第二,这方面的延迟/延迟是什么?FCFs本身就有预热时间,Firebase Run是否也有较长的预热时间?如果您有超出最初提问范围的问题,请研究这些问题,并作为不同的问题分别发布。网络延迟永远无法保证。我在这里列出了我的问题:多谢道格的帮助,我已经发布了让一切正常运行的步骤。你的firebase.json看起来怎么样?我已经退出了那个项目,但我认为我没有。我与Express一起运行该项目;我认为只有在使用firebase处理路由时才需要firebase.json。
app.get('/me/*', (req,res) =>{
    res.sendFile(path.join(__dirname+'/B/index.html'));
});

app.get('/*', (req,res) =>{
    res.sendFile(path.join(__dirname+'/A/index.html'));
});