красный узел requireHttps не работает, доступ к http не перенаправляет на https - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь открыть экземпляр узла красного цвета в Интернете с помощью HTTPS, следуя этому руководству .
Короче говоря, я добавил (без комментариев) следующие строки внутри узла узла красного * setting.js:

var fs = require("fs");

requireHttps: true,

https: {
       key: fs.readFileSync('privatekey.pem'),
       cert: fs.readFileSync('certificate.pem')
},

https работал как положено.Однако http не перенаправляет на https и вместо этого выдает ERR_EMPTY_RESPONSE

Кто-нибудь может помочь?Спасибо.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Это делает работу без какого-либо другого веб-сервера.

На основе Документация Node-RED: встраивание в существующее приложение , узел-RED работает с управляемыми серверами http и https, предоставленнымиnode.js.

В соответствии с указанным вами учебником вам не нужно переопределять settings.js.

Чтобы это работало, вы должны создать свой собственный проект:

$ mkdir myNodeREDProject
$ cd myNodeRedProject
$ touch index.js
$ npm init
$ npm install node-red

Скопируйте свой закрытый ключ ssl и сертификат в папку myNodeREDProject.

Редактируйте index.js и скопируйте следующее:

const https = require('https');
const express = require("express");
const RED = require("node-red");
const fs = require('fs');

const HTTP_PORT = 8080;
const HTTPS_PORT = 8443;

// Create an Express app
const app = express();

// at the top of routing: this is the http redirection to https part ;-)
app.all('*', (req, res, next) => {
  if (req.protocol === 'https') return next();
  res.redirect(`https://${req.hostname}:${HTTPS_PORT}${req.url}`);
});

// Add a simple route for static content served from 'public'
app.use("/",express.static("public"));

// Create a https server
const options = {
  key: fs.readFileSync('./privatekey.pem'),
  cert: fs.readFileSync('./certificate.pem')
};
const httpsServer = https.createServer(options, app);
// create a http server
const httpServer = http.createServer(app);

// Create the settings object - see default settings.js file for other options
const settings = {
  httpAdminRoot:"/red",
  httpNodeRoot: "/api",
  userDir:"./nodered/",
  functionGlobalContext: { }    // enables global context
};

// Initialise the runtime with a server and settings
RED.init(httpsServer,settings);

// Serve the editor UI from /red
app.use(settings.httpAdminRoot,RED.httpAdmin);

// Serve the http nodes UI from /api
app.use(settings.httpNodeRoot,RED.httpNode);

httpsServer.listen(HTTPS_PORT);
httpServer.listen(HTTP_PORT);

// Start the runtime
RED.start();

Наконец, запуститеприложение node-RED:

$ node index.js   # MAGIC !!!

Пожалуйста, не стесняйтесь исправлять меня, если я ошибаюсь, я проверил его на своем сервере Linux.

Извините за мой английский.

0 голосов
/ 17 декабря 2018

Это работает, как задумано, Node-RED прослушивает только один порт за раз, поэтому, когда он настроен на использование HTTPS, он не будет реагировать на HTTP-трафик.

Это означает, что вы не можете перенаправить с одного на другойпросто с Node-RED.Лучшее решение - использовать что-то вроде nginx для обратного прокси-сервера для Node-RED и заставить его обрабатывать перенаправление.

Из статьи, на которую вы ссылаетесь:

Примечание: я не делалЭто не работает с SSL, поэтому вам может потребоваться пропустить это

Вы можете видеть, что автор также ошибся и не смог заставить это работать..

...