2013-07-16 42 views
1

有沒有辦法在Express上爲SSL設置自定義端口?這僅用於開發目的。我在80/443上有一個Apache/PHP項目。在自定義端口上設置快速/節點SSL

我試過下面這個教程 http://www.hacksparrow.com/express-js-https.html

但說實話,我不能得到那個工作。如果有人可以發佈正確的方式來配置Express來做到這一點,那將是非常棒的。這是我的服務器配置:

var hskey = fs.readFileSync('mywebsite-key.pem'); 
var hscert = fs.readFileSync('mywebsite-cert.pem') 
var options = { 
    key: hskey, 
    cert: hscert 
}; 

//Create server 
var app = express(options); 

// Configure server 
app.configure(function() { 
    //parses request body and populates request.body 
    app.use(express.bodyParser()); 
    //checks request.body for HTTP method overrides 
    app.use(express.methodOverride()); 
    //perform route lookup based on url and HTTP method 
    app.use(app.router); 
    //Where to serve static content 
    app.use(express.static(path.join(application_root, 'public'))); 
    //Show all errors in development 
    app.use(express.errorHandler({ 
     dumpExceptions: true, 
     showStack: true 
    })); 
}); 


//Start server 
var port = nconf.get('port');; 
var server = require('http').createServer(app), 
    io = require('socket.io').listen(server); 
server.listen(port, function() { 

    console.log('Express server listening on port %d in %s mode', port, app.settings.env); 
}); 

回答

3

您正在初始化服務器錯誤。首先,您正在使用require('http')作爲服務器,因此它不會使用SSL選項。其次,你通過證書選項來表達,而不是https服務器。

你要做這樣的:

var hskey = fs.readFileSync('mywebsite-key.pem'); 
var hscert = fs.readFileSync('mywebsite-cert.pem') 
var options = { 
    key: hskey, 
    cert: hscert 
}; 
var express = require('express'), 
    app = express() 
    , https = require('https') 
    , server = https.createServer(options,app) 
    , io = require('socket.io').listen(server); 

// listen for new web clients: 
server.listen(8080); 
+0

好極了,謝謝!你能幫助我最後一步 - 我如何將任何http流量重定向到https? – metalaureate

+1

看到這個答案http://stackoverflow.com/a/7458587/568109。你可以通過node.js完成它,但它需要兩臺服務器。 iptables可能更有效率。 – user568109