【问题标题】:HTTP to HTTPS redirection on App Engine FlexibleApp Engine Flexible 上的 HTTP 到 HTTPS 重定向
【发布时间】:2017-08-04 07:24:54
【问题描述】:

我已经遵循了这个答案: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) Engine 提供 NodeJS。根据我在app.yaml 中得到的答案:

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

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

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

【问题讨论】:

  • 您目前的问题是什么?它应该按预期重定向到 https。
  • 正确。我希望 HTTP 请求重定向到 HTTPS,尽管这目前不起作用(即我在访问已连接到此环境的域时只是正常访问 HTTP 而没有重定向)
  • handlers: - url: /.* script: auto secure: always redirect_http_response_code: 301
  • @RobertMihaiIonas 你救了我的命。这样可行。它将我的裸域(“example.com”)重定向到“example.com”,将所有其他域重定向到 https。惊人的。没有更多的HTTP!谢谢。

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


【解决方案1】:

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

  • 使用helmet 为您处理 HSTS 内容,并实现您自己的初始重定向。
  • 我写了一个快乐的小库,总是在所有路由上强制 SSL yes-https

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

【讨论】:

  • 感谢贾斯汀,成功了!我确实在考虑更喜欢通过 https 传输所有流量。考虑到网站的设置(只是一个包含 PII 的单一表单的 1 页页面),这将是最有意义的。
  • 你能不能看看我的stackoverflow.com/questions/47453220/… 实际上是的-https 不适合我。
  • 你在吗??
  • 我使用了 Justin 的快乐小图书馆,它非常简单易用,而且很有效。
  • @Justin 非常感谢!这一直让我发疯:)
【解决方案2】:

拉贾斯汀的 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,我认为他们可能想看看使用什么魔法。

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

【讨论】:

【解决方案3】:

GCP 这应该很容易,只需使用 gcloud app cli 并配置标头(Strict-Transport-Security)或重定向规则。也许推动是迫使我们使用 Firebase 托管,而不是强制使用 HTTPS。对于带有 React、Angular 等的单页应用程序(静态内容)的快速解决方案,我们可以使用这个 JS sn-p。

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

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

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多