Sails.JS HTTP + HTTPS

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)


MOn*_*ode 1

目前看来没有办法在 sails 中执行此操作,所以我最终只是在服务器上使用 nginx 并为 HTTP->HTTPS 创建了重定向规则。