2014-10-27 113 views
0

我需要對我在某些情況下,網站使用SSL,compoundjs支持SSL和普通的HTTP

我按照自述文件中的例子

​​

我server.js是

#!/usr/bin/env node 
var fs = require('fs'); 
/** 
* Server module exports method returning new instance of app. 
* 
* @param {Object} params - compound/express webserver initialization params. 
* @returns CompoundJS powered express webserver 
*/ 
var app = module.exports = function getServerInstance(params) { 
    params = params || {}; 
    // specify current dir as default root of server 
    params.root = params.root || __dirname; 
    params["key"] = fs.readFileSync('/tmp/tls.key').toString(); 
    params["cert"] = fs.readFileSync('/tmp/tls.cert').toString(); 
    return require('compound').createServer(params); 
}; 

if (!module.parent) { 
    var port = process.env.PORT || 3000; 
    var host = process.env.HOST || '0.0.0.0'; 

    var server = app(); 
    server.listen(port, host, function() { 
     console.log(
      'Compound server listening on %s:%d within %s environment', 
      host, port, server.set('env') 
     ); 
    }); 
} 

現在的問題是我無法獲取http,只有https。 如果我只是把我的證書和密鑰的配置文件夾內,並有

**var app = module.exports = function getServerInstance(params) { 
    params = params || {}; 
    // specify current dir as default root of server 
    params.root = params.root || __dirname; 
    return require('compound').createServer(params); 
};** 

然後我得到一些錯誤

config/tls.cert:1 
tion (exports, require, module, __filename, __dirname) { -----BEGIN CERTIFICAT 
                    ^^^^^^^^^^^ 
SyntaxError: Unexpected identifier 
    at Module._compile (module.js:439:25) 

什麼是讓compoundjs支持最快和最簡單的方法都HTTPS和http路線,我是否需要有兩臺服務器(就像你經常用直接快遞)?

回答

0

是的 - 需要有兩臺服務器,如你使用express。所以

var app = module.exports = function getServerInstance(params) { 
    params = params || {}; 
    // specify current dir as default root of server 
    params.root = params.root || __dirname;  
    return require('compound').createServer(params); 
}; 


var port = process.env.PORT || 80; 
var host = process.env.HOST || '0.0.0.0'; 
var port_https = 443; 

var server = app(); 


server.listen(port, host, function() { 
    server.set("confvar", process.env.SERVER_NAME); 
    console.log(
     'Compound server listening on %s:%d within %s environment', 
     host, port, server.set('env') 
    ); 
}); 

if(fs.existsSync(PATH TO KEY GOES HERE)){ 
    var apphttps = module.exports = function getServerInstance(params) { 
     params = params || {}; 
     // specify current dir as default root of server 
     params.root = params.root || __dirname;  
     params.key = fs.readFileSync(PATH TO KEY GOES HERE).toString(); 
     params.cert = fs.readFileSync(PATH TO CERT GOES HERE).toString(); 
     return require('compound').createServer(params); 
    }; 
    var serverhttps = apphttps(); 

    serverhttps.listen(port_https, host, function() { 
     serverhttps.set("confvar", process.env.SERVER_NAME); 
     console.log(
      'Compound https server listening on %s:%d within %s environment', 
      host, port_https, serverhttps.set('env') 
     ); 
    }); 
}