Могу ли я настроить expressjs для обслуживания одних страниц через http и других через https? - PullRequest
4 голосов
/ 01 марта 2011

На основании ответа на этот вопрос:

Как настроить nodejs / expressjs для обслуживания страниц через https?

Я пытался настроитьэквивалент:

var express = require('express');
var fs = require("fs");
var crypto = require('crypto');

var app = express.createServer();
var appSecure = express.createServer();
var privateKey = fs.readFileSync('privatekey.pem').toString();
var certificate = fs.readFileSync('certificate.pem').toString();
var credentials = crypto.createCredentials({key: privateKey, cert: certificate});
appSecure.setSecure(credentials);


app.get('/secretStuff', function(req,res) {
//redirect to https
}

appSecure.get('/secretStuff', function(req, res) {
//show you the secret stuff
}

Это выполнимо в текущей версии expressjs и узла 2.4?

Ответы [ 2 ]

3 голосов
/ 17 июля 2011

Да, это можно сделать, и, похоже, у вас уже есть большая часть того, что вам нужно.Просто отправьте перенаправление в ваш обработчик app.get

app.get('/secretStuff', function(req,res) {
  res.redirect('https://' + req.header('Host') + req.url);
}

Также убедитесь, что вы делаете что-то вроде app.listen(80) и appSecure.listen(443), чтобы фактически запустить серверы на соответствующем порту.В противном случае обязательно создайте URL-адрес HTTPS с правильным портом.Для производства эта вещь обычно обрабатывается за пределами вашего сервера приложений (node.js) с обратным прокси-сервером, таким как nginx.Это легко сделать в nginx, который позволит вашему процессу node.js запускаться без полномочий root и избавит от необходимости иметь клиентов, напрямую подключающихся к node.js, который не так закален в битве, как nginx, для обслуживания подключенных в реальном времени TCP-соединений(Я перефразирую самого Райана Даля здесь).

0 голосов
/ 02 марта 2011

Вы можете обслуживать веб-страницу только через соединение, на которое поступил запрос. Если запрос не поступил через https, вы не можете отправить ответ таким образом.

Итак, сначала у вас естьпрослушивать запросы как http, так и https.Если запрос приходит через http, на который вы хотите ответить через безопасное соединение, не выполняйте никакой обработки, а сразу же перенаправьте его на URL-адрес https.Затем, когда клиент повторно отправит запрос, обработайте его как обычно.

Если среда использует JSGI, то вы, вероятно, можете использовать модуль перенаправления из Jack , в противном случае вам придется сделать это самостоятельно.Подробности указаны по ссылке: код ответа 301 и заголовок Location: с URL-адресом https.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...