App Engine上的HTTP到HTTPS重定向

Art*_*Art 12 google-app-engine node.js google-cloud-platform

我已经按照这个问题的答案:在谷歌云中从http重定向到https,但它现在似乎不再准确.引用的锚点(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
Run Code Online (Sandbox Code Playgroud)

因为HTTPS在它到达我的Express引擎之前显然已经终止(并且重定向就没用了); 目前如何正确实施?

可能有用,我通过控制台中的"自定义域"选项卡附加了一个外部域,并且确实配置了SSL证书(因此,如果用户手动转到https://.com,一切都很好)

Jus*_*ith 18

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

  • 使用头盔为您做HSTS的事情,并实现您自己的初始重定向.
  • 我写了一个快乐的小库,总是在所有路由上强制使用SSL表示yes-https

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


小智 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);
});
Run Code Online (Sandbox Code Playgroud)

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

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