MOn*_*ode 10 javascript ssl https express sails.js
我试图找出如何解除响应HTTP和HTTPS请求的风帆应用程序.我使用config/local.js配置express这样的方法(详见这里):
var fs = require('fs');
module.exports = {
port: process.env.PORT || 1337,
environment: process.env.NODE_ENV || 'development',
express: { serverOptions : {
key: fs.readFileSync('ssl/key.pem'),
cert: fs.readFileSync('ssl/cert.pem')
}}
};
Run Code Online (Sandbox Code Playgroud)
但是,虽然这有效,但它会导致服务器只能提供HTTPS请求.有没有人想出如何完成这项工作,而没有创建一个单独的HTTP服务器重定向到端口443?
谢谢
小智 6
1-取消注释 local.js 中 SSL 证书的路径,或在 config/env/development.js 中添加 SSL 证书的路径。
module.exports = {
ssl: {
ca: require('fs').readFileSync(__dirname + '/ssl/ca.crt'),
key: require('fs').readFileSync(__dirname + '/ssl/key.key'),
cert: require('fs').readFileSync(__dirname + '/ssl/cert.crt')
},
port: 443
}
Run Code Online (Sandbox Code Playgroud)
2-在 config/env/products.js 中添加策略部分
module.exports = {
ssl: {
ca: require('fs').readFileSync(__dirname + '/ssl/ca.crt'),
key: require('fs').readFileSync(__dirname + '/ssl/key.key'),
cert: require('fs').readFileSync(__dirname + '/ssl/cert.crt')
},
port: 443,
policies: {
'*': 'isHTTPS'
}
}
Run Code Online (Sandbox Code Playgroud)
3-在 api/policies 文件夹中创建 isHTTPS.js 策略。该策略会将 HTTP 请求重定向到 HTTPS
module.exports = function(req, res, next) {
if (req.secure) {
// Already https; don't do anything special.
next();
} else {
// Redirect to https.
res.redirect('https://' + req.headers.host + req.url);
}
};
Run Code Online (Sandbox Code Playgroud)
4-然后我们将编辑 config/bootstrap.js 文件并监听端口 80(如果环境是生产环境),以便我们可以将请求重定向到 443 即 SSL
var http = require( 'http' );
module.exports.bootstrap = function(cb) {
//If the environment is production, then listen on port 80
if(sails.config.environment === "production") {
http.createServer( sails.hooks.http.app ).listen( 80 );
}
cb();
}
Run Code Online (Sandbox Code Playgroud)