在使用HTTP触发器时,我无法在任何地方看到为我的Google Cloud功能设置自定义域的任何选项。似乎是一个相当重大的遗漏。有没有办法使用自定义域而不是他们的location-project.cloudfunctions.net
域或某些解决方法来达到同样的效果?
我读了一篇文章,建议在函数前面使用CDN,并将功能URL指定为拉区。这可行,但会带来不必要的成本 - 在我的场景中,没有任何内容能够被缓存,因此使用CDN远非理想。
答案 0 :(得分:15)
如果您connect your Cloud project with Firebase,可以connect your HTTP-triggered Cloud Functions to Firebase Hosting获取虚荣网址。
答案 1 :(得分:3)
如果您不介意url的最终外观,还可以设置CNAME dns记录。
function.yourdomain.com -> us-central1******.cloudfunctions.net
那你可以这样称呼
function.yourdomain.com/function-1/?message=Hello+World
答案 2 :(得分:2)
使用 Cloudflare Workers(CDN、反向代理)
<块引用>为什么?因为它不仅允许您通过 Cloud Function 设置反向代理,还允许您配置诸如 - CDN 边缘位置的服务器端渲染 (SSR)、初始 (SPA) 网页加载的 API 响应、CSRF保护、DDoS 保护、高级缓存策略等。
DNS
设置,添加指向 A
的 192.0.2.1
记录,并为该记录启用 Cloudflare 代理(橙色图标)。例如:function handleRequest(request) {
const url = new URL(request.url);
url.protocol = "https:";
url.hostname = "us-central1-example.cloudfunctions.net";
url.pathname = `/app${url.pathname}`;
return fetch(new Request(url.toString(), request));
}
addEventListener("fetch", (event) => {
event.respondWith(handleRequest(event.request));
});
Workers
选项卡,并添加一个新路由,将您的域 URL(模式)映射到此工作脚本,例如example.com/*
=> proxy
(脚本)有关完整示例,请参阅 GraphQL API Starter Kit(请参阅 web/proxy
)。
此外,在 GCF 问题跟踪器中为 Allow me to put a Custom Domain on my Cloud Function 投票。
答案 3 :(得分:1)
有一段时间等待这个答案。
是的,现在您可以将自定义域用于Google Cloud功能。
转到firebase并将您的项目与firebase关联。我们对这里感兴趣的是托管。按照firebase documentation-(非常不错的文档)安装Firebase CLI
现在创建您的项目,就像您在文档中可能已经注意到的那样,将Firebase添加到您的项目中,请键入firebase init
。选择托管即可。
完成后,查找firebase.json
文件。然后像这样自定义
{
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "myfunction/custom",
"function": "myfunction"
},
]
}
}
默认情况下,您会获得https://project-name.web.app
之类的域,但可以在控制台上添加自己的域。
现在部署您的网站。由于您对网络托管不感兴趣,因此您可以按原样离开。现在您的函数将像这样执行
要执行的功能> myfunction
自定义网址> https://example.com/myfunction/custom
答案 4 :(得分:0)
避免Firebase的另一种方法是将负载平衡器放在Cloud Function或Cloud Run的前面,并使用“无服务器网络端点组”作为负载平衡器的后端。
设置好负载均衡器后,只需修改域的DNS记录以指向负载均衡器即可。
https://cloud.google.com/load-balancing/docs/https/setting-up-https-serverless