Как я могу настроить свой код сервера NodeJs для ответа на запросы HTTPS? - PullRequest
0 голосов
/ 27 мая 2020

У меня есть небольшой nodejs сервер, который работает без проблем. Теперь я пытаюсь использовать «HTTPS» из соображений безопасности. У меня есть следующий код, но когда я пытаюсь открыть страницу в Firefox по ссылке [http://192.168.2.22:8080/api/users], на терминале я вижу НАПРАВЛЕНИЕ >>> https://192.168.2.22: 8080 / api / users но в браузере вместо ожидаемого ответа я обнаружил эту ошибку:

Ошибка безопасного подключения Произошла ошибка во время подключения к 192.168.2.22:8080. SSL получил запись, длина которой превышает максимально допустимую.

Код ошибки: SSL_ERROR_RX_RECORD_TOO_LONG

// Modules /////////////////////////////////////////////////////////////////////
const db = require('./db.js');

// Packages ////////////////////////////////////////////////////////////////////
const colors = require('colors');
const express = require('express');
const app = express();
const fileUpload = require('express-fileupload');
const fs = require('fs');

// Constant Variables //////////////////////////////////////////////////////////
const PORT_SERVER = 8080;
const HOST = '192.168.2.22';

////////////////////////////////////////////////////////////////////////////////
app.use(express.json({limit: '50mb'}));
// app.use(express.urlencoded({limit: '50mb'}));

// set up a route to redirect http to https
app.get('*', function(req, res) {
    console.log('DIRECTING >>> https ://' + req.headers.host + req.url);
    res.redirect('https://' + req.headers.host + req.url);
});

app.get('/api/users/', async (req, res) => {
    console.log('CHECK POINT !!!');
    let users = await db.db.get_users();
    console.log("USERS : " + users);
    res.send(users);
});

// have it listen on 8080
app.listen(PORT_SERVER, () => console.log(`Listen at ${PORT_SERVER}...`));

Как я могу решить эту проблему? Мне не удалось найти решение, которое я мог бы легко применить к своему коду, Я вроде новичок ie для NodeJs.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Вы не настроили свой сервер для SSL. Настройте SSL с помощью модуля https, как показано ниже. В этом примере я создал два express один для Http и один для https, поскольку мы не можем запускать одновременно http и не https на одном и том же порте.

 const express = require('express');
 const   http = require('http'),
 const    https = require('https')
 const fs = require('fs')
 const httpApp = express()
 const app = express()

const httpsOptions = {
    key: fs.readFileSync("server.key"),
    cert: fs.readFileSync("server.crt")
};
httpApp.set('port',80);
httpApp.get("*", function (req, res, next) {
    res.redirect("https://" + req.headers.host + "/" + req.path);
});

app.set('port', 443);
app.enable('trust proxy');

http.createServer(httpApp).listen(httpApp.get('port'), function() {
    console.log('Express HTTP server listening on port ' + httpApp.get('port'));
});

https.createServer(httpsOptions, app).listen(app.get('port'), function() {
    console.log('Express HTTPS server listening on port ' + app.get('port'));
});

Лучший способ перенаправить с не-http на https - использовать Nginx веб-сервер в качестве обратного прокси-сервера и определить правило перенаправления в Nginx конфигурационном файле.

клиент ---> nginx обратный прокси (с SSL и правилами перенаправления) -> express сервер

0 голосов
/ 27 мая 2020

попробуйте изменить порт на 443, https по умолчанию работает на 443!

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