2013-04-05 3 views
1

У меня есть приложение Node.js Express 3.0, которое прослушивает порт 3000 локально и 80 онлайн, это нормально. Однако мне нужно сделать сертификат SSL.Express 3.0 HTTPS

Я смотрел много источников в Интернете, однако все они устарели или работают только на порте 443 или ничего. Однако мне нужно прослушивать как 443, так и 80 и перенаправлять любые запросы на 80 обратно до 443.

Есть ли какие-либо современные примеры этого?

ответ

3

Я бы сделал это с помощью двух различных процессов: небезопасного прокси-сервера и безопасного сервера.

Небезопасный прокси прослушивает порт 80 и отвечает на все запросы с 302 перенаправления на безопасный сервер

небезопасной Proxy

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) 
}) 

Secure Server

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

Смежные вопросы