1

Firebase 托管已经在 firebase.json 中有 https:// 重定向。我有一个 Angular 应用程序,为了准备 SSR,我从 firebase 托管迁移到 Cloud Run。起初我不知道我是否应该与 Angular Universal 混淆或这样做,我在这里看到了一个类似的问题,但它是用 Nginx 回答的,这不是我需要的。

我试图用 server.ts 文件做一些非常愚蠢的事情,但这根本不是答案。老实说,我不知道从哪里开始。我已经搜索了谷歌的答案,包括谷歌云运行文档:

https://cloud.google.com/run/docs/authenticating/public

但我不知道从这里去哪里。

4

3 回答 3

2

Cloud Run 前端处理 HTTP 和 HTTPS。从 Cloud Run 到在容器内运行的软件是通过 HTTP 端口 8080(可能会更改的当前默认端口)。

由于您的代码正在运行 HTTP,因此您需要检测 Cloud Run 在请求中包含的 HTTP 标头。这个标题是x-forwarded-proto. 此标头告诉您客户端用于连接到 Cloud Run 前端的协议。如果协议是 HTTP,那么您的软件需要将重定向 (HTTP 301) 发送到正确的 URI。

以下代码截取读取请求标头,检查x-forwarded-protoHTTP 并在 True 时重定向。

if (req.headers['x-forwarded-proto'] != 'https')
    res.redirect('https://' + req.hostname + req.url)
于 2019-05-31T04:02:31.423 回答
1

如果您对 Firebase 托管感到满意,可以继续将其与 Cloud Run 一起使用:https ://firebase.google.com/docs/hosting/cloud-run

这让您可以保留 Firebase 托管的出色功能,例如强制 HTTPS、重写 URL 以及将某些 URL 指向静态内容。

于 2019-05-31T23:30:27.160 回答
-2

如果您被允许制作 .htaccess 文件,请尝试以下操作:

  1. 在您网站的主目录中创建一个 .htaccess
  2. 添加这些行:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  1. 重新加载您的网站,并花一分钟时间注册更改。

基本上,这会将用于访问该站点的任何 URL 强制为 HTTPS:// URL。

https://www.siteground.com/kb/how-to-force-ssl-with-htaccess/

于 2019-05-30T18:32:33.837 回答