2014-02-04 3 views
0

У меня есть REST API, построенный с узлом, который обменивается данными через SSL. Сервер построен с использованием express и использует vhosts и cors. Недавно я добавил слушателя на порт 80, чтобы я мог заставить HTTPS. Когда я тестирую, я попытался получить доступ к http://manage.domain.com:443/, но запрос просто зависает. Похоже, ни один из слушателей не согласился с этим. Все, что я хочу сделать, это перенаправить этот запрос на https.Имея express.js или узел принимают http-соединение через порт 443

ответ

1

Я предполагаю, что вы уже знаете это, но для обслуживания содержимого HTTPS вам понадобится сервер https (duh). Неважно, какой порт вы запускаете; 443 - это только порт по умолчанию для HTTPS. Если вы хотите, чтобы HTTP-запросы перенаправлялись на HTTPS, вам нужен как HTTP, так и https-сервер. Вот пример того, как файл приложение должно выглядеть:

var http = require('http'), 
    https = require('https'), 
    express = require('express') 
    fs = require('fs'); 

var domain = 'localhost'; 

var app = express(); 
app.get('*', function(req, res){ 
    // redirect to HTTPS 
    res.redirect('https://' + domain + req.path); 
}); 

http.createServer(app).listen(80, function(){ 
    console.log('HTTP listening on port 80'); 
}); 

var appSecure = express(); 
// configure your app here 

var options = { 
    key: fs.readFileSync('ssl_key.pem'), 
    cert: fs.readFileSync('ssl_cert.crt'), 
}; 

https.createServer(options, appSecure).listen(443, function(){ 
    console.log('HTTPS listening on port 443'); 
}); 

Очевидно, что вам нужен ключ SSL и сертификат, чтобы сделать эту работу.

Как вы, наверное, знаете, большинство систем требуют повышенных привилегий, чтобы открыть порт менее 1025; поэтому, если вы используете порт 80 и порт 443, вам придется запустить сервер приложений с повышенными привилегиями (если вы работаете на OSX/Linux/BSD, просто сделайте sudo node app.js).

+0

Это точно настройка у меня есть. В моем случае, если я попробую http: // localhost: 443 /, то запрос просто продолжит загрузку. Обратите внимание, что моими серверами являются http на 80 и https на 443, но я пытаюсь сделать клиент доступ к http на 443. Я не хочу отправлять какие-либо данные, просто хочу перенаправить пользователя на https/443 – Xerri

+1

. К сожалению, вы не сможете сделать это из коробки с помощью Node: вам придется по существу написать свой собственный модуль ('httpAndHttps'), и это будет ... существенное усилие. Это обсуждение может вам помочь: http://serverfault.com/questions/359461/apache-answer-both-http-and-https-on-the-same-port –

+1

Вы можете просто установить балансировщик нагрузки для выгрузки ssl перед узлом, а затем со стороны узла все его http: –

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