Как перенаправить http на https на Node JS - PullRequest
0 голосов
/ 14 января 2020

Я использую nodejs для управления своим сервером, и у меня есть веб-сайт.

Я недавно настроил SSL и хочу перенаправить http на https, но не смог этого сделать. Я испробовал каждое одобренное решение для stackoverflow, но ни одно из них не работает.

Вот мое серверное приложение:

const express = require('express');
const app = express();
const https = require('https');
const fetch = require('node-fetch');
const bcrypt = require('bcrypt');
const hogan = require('hogan.js');
const fs = require('fs');

const optionSSL = {
    key: fs.readFileSync("./etc/ssl/myssl.pem"),
    cert: fs.readFileSync("./etc/ssl/myssl.crt")
};

//app.listen(80, () => console.log("Listening at 80"));
app.use(express.static('public', {
    extensions: ['html', 'htm'],
}));

app.use(express.json({limit: '1mb'}));
app.use(express.urlencoded({ extended: false }));

https.createServer(optionSSL, app).listen(443, "mydomain.com");

То, что я пробовал:

Автоматическое c HTTPS-соединение / перенаправление с node.js / express

Редирект nodejs express stati c запрос на https

Как вы следуете HTTP перенаправления в Node.js?

Ответы [ 2 ]

2 голосов
/ 14 января 2020
https.createServer(optionSSL, app).listen(443, "mydomain.com");

Вы прослушиваете порт 443, который является портом HTTPS.

Если вы хотите перенаправить с HTTP, вам нужно прослушивать порт HTTP (а не прикрепите к нему сертификаты).

Самый простой способ сделать это - запустить совершенно другой сервер (выделенный для выполнения перенаправлений) на порту 80. Вы можете написать один в Node.js или просто используйте что-нибудь готовое, например nginx или lighttpd.

0 голосов
/ 14 января 2020

Я решил эту проблему, добавив следующие коды:

const httpApp = express();
const http = require('http');

httpApp.get("*", function(req, res, next) {
    res.redirect("https://" + req.headers.host + req.path);
});

http.createServer(httpApp).listen(80, function() {
    console.log("Express TTP server listening on port 80");
});

https.createServer(optionSSL, app).listen(443, function() {
    console.log("Express HTTP server listening on port 443" );
});

Спасибо @Quentin за идею прослушивания двух портов.

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