Google App Engine - 将HTTP重定向到HTTPS

时间:2017-12-29 14:25:12

标签: google-app-engine

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

我的app.yaml文件看起来像这样。我有脚本:没有,因为如果我没有它,我会得到一些解析错误,但这不是问题。

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

所以现在,如果我去http:// mysite.org,它会保留在http版本上,只显示' mysite.net'在网址栏。如果我访问https:// mysite.org,它会显示安全版本。如果我转到谷歌给我的appspot网址,http会重定向到https版本。我在app.yaml中缺少什么东西吗?这不是自定义运行时

1 个答案:

答案 0 :(得分:1)

secure的{​​{1}}下的handlers下使用helmetapp.yaml设置是在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灵活环境中,secure下的handlers设置已被弃用。如果需要SSL重定向,则可以更新应用程序代码并使用X-Forwarded-Proto标头重定向http流量。

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

  

强制HTTPS连接

     

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

     

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