【问题标题】:Google App Engine - Redirect HTTP to HTTPSGoogle App Engine - 将 HTTP 重定向到 HTTPS
【发布时间】:2017-12-29 14:25:12
【问题描述】:

我是应用引擎的新手,我正在尝试对其进行设置,以便将任何 http 请求重定向到 https。

我的 app.yaml 文件如下所示。我有 script: None 在那里,因为如果我没有它,我会遇到一些解析错误,但这不是问题。

env: flex
runtime: nodejs
handlers:
- url: /.*
  script: None
  secure: always

所以现在,如果我访问 http://mysite.org,它会停留在 http 版本上,并且只会在 url 栏中显示“mysite.net”。如果我访问 https://mysite.org,它会显示安全版本。如果我去谷歌给我的appspot url,http重定向到https版本就好了。 app.yaml 中是否缺少我的东西?这不在自定义运行时中

【问题讨论】:

标签: google-app-engine


【解决方案1】:

app.yaml 中使用helmet 下的secure 设置secure 在Google App Engine 最新版本中被弃用

https://helmetjs.github.io/docs/hsts/

https://expressjs.com/en/advanced/best-practice-security.html

// Forcing HTTPS connections on Gooogle App Engine Flexible Environment sample app.js

'use strict';

const express = require('express');
const helmet = require('helmet');

const app = express();
const port = process.env.PORT || 8080;

app.disable('x-powered-by');

app.enable('trust proxy');

app.use(helmet.hsts({
    maxAge: 31536000,
    includeSubDomains: true,
    preload: true,
    setIf: function (req, res) {
        return req.secure;
    }
}));

app.get('/', (req, res) => {
    if (!req.secure) {
        res.redirect(301, "https://" + req.headers.host + req.originalUrl);
    }
    res.status(200).send("hello, world\n").end();
});

app.listen(port, () => {
    console.log(`App listening on port ${port}`);
    console.log('Press Ctrl+C to quit.');
});

升级到 App Engine 最新版本

对于 App Engine 柔性环境,handlers 下的 secure 设置现已弃用。如果您需要 SSL 重定向,您可以更新您的应用程序代码并使用 X-Forwarded-Proto 标头来重定向 http 流量。

https://cloud.google.com/appengine/docs/flexible/php/upgrading#appyaml_changes

强制 HTTPS 连接

出于安全原因,所有应用程序都应鼓励客户端通过 https 进行连接。您可以使用 Strict-Transport-Security 标头来指示浏览器在给定页面或整个域中优先使用 https 而不是 http,例如:

Strict-Transport-Security: max-age=31536000; includeSubDomains

https://cloud.google.com/appengine/docs/flexible/php/how-requests-are-handled

HTTPS 和转发代理

对于 Express.js,使用信任代理设置

app.set('trust proxy', true);

https://cloud.google.com/appengine/docs/flexible/nodejs/runtime#https_and_forwarding_proxies

【讨论】:

    【解决方案2】:

    将下面的代码 sn-p 添加到 web.xml 在柔性环境中效果很好

    <security-constraint>
      <web-resource-collection>
        <web-resource-name>Entire Application</web-resource-name>
        <url-pattern>/*</url-pattern>
      </web-resource-collection>
      <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
    </security-constraint>
    

    【讨论】:

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