Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sails.JS HTTP + HTTPS

Sails.JS HTTP + HTTPS
EN

Stack Overflow用户
提问于 2014-02-06 11:57:40
回答 7查看 6.8K关注 0票数 11

我正试图弄清楚如何提升一个同时响应HTTP和HTTPS请求的sails应用程序。我使用config/local.js方法配置了如下所示的表达式(详细的here):

代码语言:javascript
运行
AI代码解释
复制
 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')
  }}

};

但是,虽然这样做有效,但它只导致服务器只允许提供HTTPS请求。有没有人知道如何做到这一点,而不创建一个单独的HTTP服务器重定向到端口443?

谢谢

EN

回答 7

Stack Overflow用户

发布于 2016-05-25 01:09:21

1-在local.js中取消SSL证书的路径注释,或者在config/env/production.js中添加到SSL证书的路径。

代码语言:javascript
运行
AI代码解释
复制
    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
}

2-在config/env/production.js中添加一个策略部分

代码语言:javascript
运行
AI代码解释
复制
    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'
   }
}

3-在api/ isHTTPS.js文件夹中创建一个策略。此策略将将HTTP请求重定向到HTTPS

代码语言:javascript
运行
AI代码解释
复制
  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);
    }
};

4-然后我们将编辑config/bootstrap.js文件,如果环境是生产的,我们将监听端口80,这样我们就可以将请求重定向到443,即SSL。

代码语言:javascript
运行
AI代码解释
复制
    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();
}
票数 5
EN

Stack Overflow用户

发布于 2014-02-22 13:54:59

通过修改/local.js文件,我能够让http和https在sails中运行:

代码语言:javascript
运行
AI代码解释
复制
var fs = require('fs');
var local = ... // Your default local.js settings should go here
if(require('optimist').argv.https) {
    local.express = {
        serverOptions : {
            key: fs.readFileSync('ssl/server.key'),
            cert: fs.readFileSync('ssl/server.crt')
        }
    };
    local.port = 1338; // This port should be different than your default port
}
module.exports = local;

现在,您将需要运行您的风帆应用两次。第一次输入常规的sails lift命令。第二次运行sails lift --https

这应该允许您在相同的代码基上运行http和https服务器。正如其他人所提到的,nginx是处理这类问题的更好的解决方案,但是如果您正在进行本地开发,并且不想安装nginx,那么上面的解决方案就很好了。

票数 3
EN

Stack Overflow用户

发布于 2015-12-17 06:46:29

要同时拥有HTTP和HTTPS,可以避免重定向方式:

在/config/env/production.js中配置您的SSL密钥& certHTTPS端口

代码语言:javascript
运行
AI代码解释
复制
var fs = require( 'fs' );
module.exports = {
    port: 443,
    ssl: {
        key: fs.readFileSync( 'ssl_key.key' ),
        cert: fs.readFileSync( 'ssl_key.crt' )
    }
    //, ...
};

然后,使用第二个服务器侦听端口80到/config/bootstrap.js

代码语言:javascript
运行
AI代码解释
复制
var http = require( 'http' );
module.exports.bootstrap = function ( cb ) {
    // ...
    if ( process.env.NODE_ENV == 'production' )
        http.createServer( sails.hooks.http.app ).listen( 80 );
    // ...
};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21612738

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档