Подтвердить что ты не робот

Закрепить SSL с помощью expressjs 3

Я запускаю сервер node.js express 3 без прокси и использующий SSL.

Я пытаюсь выяснить, как заставить все соединения проходить через https.

Поиск в Google показывает мне это:

https://groups.google.com/forum/#!topic/express-js/Bm6yozgoDSY

В настоящее время нет способа принудительного перенаправления https, хотя это кажется как немного странная работа. У нас есть только https-приложение, и мы просто есть простой ~ 4-строчный node http-сервер, который перенаправляет, ничего фантазии

Это то, что мне нужно, но он не говорит, что это за 4 строки.

Как мы это делаем? Спасибо.

4b9b3361

Ответ 1

Я не совсем понимаю смысл запуска двух серверов, когда только один может отлично справиться с работой. Например, добавив простое промежуточное ПО в файл вашего сервера:

app.use(function(req, res, next) {
  if(!req.secure) {
    return res.redirect(['https://', req.get('Host'), req.url].join(''));
  }
  next();
});

Это перенаправляет любой небезопасный запрос на соответствующую страницу HTTPS. Например, от http://example.com/ до https://example.com/ и http://example.com/foo?bar=woo до https://example.com/foo?bar=woo. Это определенно поведение, которого я ожидал бы. Возможно, вам следует отфильтровать это хостом, поэтому он перенаправляет только на домены, для которых вы владеете, и установил надлежащий сертификат.

Если ваше приложение работает за другим сервером, например Nginx, вы можете добавить параметр конфигурации app.set('trust proxy', true). Или, что еще лучше, сделайте Nginx самой переадресацией, которая будет более эффективной, чем любое приложение Node.js.

Изменить: В соответствии с моими показателями join немного быстрее, чем + для конкатенации строк. Ничего драматичного, но каждая победа - это победа...

Ответ 2

Вам необходимо создать второй сервер, прослушивающий 80, и перенаправить с заголовком 301 на ваш https-сервер:

var express = require('express');
var app = express();

app.get('/', function(req, res, next){
  res.redirect('https://' + app.address().address)
});

app.listen(80);