2013-04-05 26 views
1

我有一个Node.js Express 3.0应用程序,它在本地监听端口3000,在线监听80端口,这很好。然而我现在需要做的是引入一个SSL证书。Express 3.0 HTTPS

我已经在网上查看了很多资源,但是它们都是过时的,或者只能在端口443上工作,或者什么都不工作。然而,我需要做的是在443和80上进行监听,然后将任何请求重新指向80回到443.

他们是否有任何最新的示例?

回答

3

我会用2个不同的进程来做到这一点:一个不安全的代理服务器和一个安全的服务器。

的不安全代理侦听端口80和响应与302的所有请求重定向到安全服务器

不安全的代理

var http = require('http') 
var port = 80 
var server = http.createServer(function (req, res) { 
    // change this to your secure sever url 
    var redirectURL = 'https://www.google.com' 
    res.writeHead(302, { 
    Location: redirectURL 
    }); 
    res.end(); 
}).listen(port, function() { 
    console.log('insecure proxy listening on port: ' + port) 
}) 

安全服务器

var https = require('https') 
var express = require('express') 
var fs = require('fs') 
var keyFilePath = '/path/to/key.pem' 
var certFilePath = '/path/to/cert.pem' 

var app = express() 
// put your express app config here 
// app.use(...) etc. 

var port = 443 // standard https port 
var options = { 
    key: fs.readFileSync(keyFilePath, 'utf8'), 
    cert: fs.readFileSync(certFilePath, 'utf8') 
} 

var server = https.createServer(options, app) 
server.listen(port, function() { 
    console.log('secure server listening on port: ' + port) 
}) 

注意可以在单个进程中运行这两个服务器,但更易于将关注点分离为不同的进程。

+1

当你使用GeoTrust证书时,你应该确保你也添加了中间证书:ca:fs.readFileSync(caFilePath,'utf8')'。否则,您的SSL将不会被验证。 – James 2013-04-07 22:18:32

相关问题