我是应用引擎的新手,我尝试设置它,以便将任何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中缺少什么东西吗?这不是自定义运行时
答案 0 :(得分:1)
在secure
的{{1}}下的handlers
下使用helmet
和app.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