App Engine上的HTTP到HTTPS重定向

时间:2017-03-14 04:39:18

标签: node.js google-app-engine google-cloud-platform

我已经按照这个答案:Redirect from http to https in google cloud但它似乎不再是现在准确的了。引用的锚点(https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml#security)似乎已被删除但没有替换记录。

作为参考,我通过Google App(flex)引擎为NodeJS提供服务。根据我在app.yaml中的答案:

handlers:
- url: /.*
  script: IGNORED
  secure: always

由于HTTPS在点击我的Express引擎之前显然已经终止(并且重定向就没用了);目前如何正确实施?

潜在的帮助,我通过"自定义域"附加了外部域名。控制台中的选项卡,确实配置了SSL证书(因此,如果用户手动转到https://.com,一切正常)

3 个答案:

答案 0 :(得分:18)

灵活的环境目前不支持app.yaml中的处理程序。如果你想要https://重定向,你有几个选择:

  • 使用helmet为您执行HSTS操作,并实施您自己的初始重定向。
  • 我写了一个快乐的小图书馆,总是在快递yes-https
  • 的所有路线上强制使用SSL

我们正在考虑默认将所有流量自动重定向到SSL。你认为这对你的应用程序有好处吗?

答案 1 :(得分:6)

拉Justin的yes-https库,我能够让它工作:

var app = express();
app.use(function(req, res, next){
  if (req.host != 'localhost' && req.get('X-Forwarded-Proto') == 'http') {
    res.redirect(`https://${req.host}${req.url}`);
    return;
  }

  app.router(req, res, next);
});

起初我以为我必须这样做,因为我在一个appengine子域,并且不能使用HSTS。然后我学会了HSTS适用于子域名。 :)无论如何,我认为人们可能想看看如果他们不想因为某些原因使用yes-https而使用的神奇位。

Justin,默认情况下自动将所有流量重定向到SSL听起来对我来说很棒。在我找到这篇文章之前,我花了好几个小时试图弄清楚如何这样做,因为我试图让我的应用程序按照https://developers.google.com/web/fundamentals/engage-and-retain/app-install-banners/将Chrome添加到主屏幕安装横幅。

答案 2 :(得分:0)

GCP只需使用 gcloud应用程序cli 并配置标头(Strict-Transport-Security)或重定向规则,它应该很容易。可能的推动力是迫使我们改为Firebase Hosting,这已经在强制HTTPS。对于使用React,Angular等针对单页应用(静态内容)的快速解决方案,我们可以使用此JS代码段。

它忽略本地主机环境。您可以使用要排除的主机名更改localhost。然后使用https作为协议进行重定向。

 if ( location.host.indexOf("localhost") < 0 && location.protocol.toLowerCase() !== "https:"){
     const url= `https://${location.host}`;
    location.replace(url);    
  }