Мой веб-сайт работает через HTTPS в общедоступном хостере и подключается к серверу узлов, работающему на Raspberry PI.
В той же сети также есть аппаратное обеспечение (назовем его декодером).с PI, который отправляет поток данных через TCP.Цель PI - прочитать этот поток и отправить его через WebSocket
в браузер.Таким образом, цель состоит в том, чтобы вывести этот поток на мой веб-сайт.
Теперь я столкнулся с проблемой содержания миксов и не знаю, как ее решить.
То, что я до сих пор делал, этоустановить веб-сервер nginx
на PI и установить сертификат Letsencrypt.Оба работают нормально (проверено с помощью обычного вызова https: // в веб-браузере).
Соединение Websocket без SSL также работает нормально, и я получаю данные, но с SSL не будет работать.Я предполагаю, что проблема в том, что декодер не может обрабатывать SSL.
Так как я могу "отправить", "преобразовать", "туннелировать" или "прокси" поток данных без SSL вHTTPS сервер?
Обновление
@ Джейк Хольцингер: вы абсолютно правы.Данной информации было недостаточно.Сожалею!Я пытаюсь уточнить:
nginx
без каких-либо дальнейших изменений.Таким образом, именно эта конфигурация исходит от установки - , которую веб-сайт (Angular) выполняет
let connection = new WebSocket('wss://domain:port');
. Узловый сервер выглядит следующим образом:
const net = require('net');
const fs = require('fs');
const https = require('https');
const date = require('date-and-time');
const config = require('./server-config.json');
const httpProxy = require('http-proxy');
// SSL SERVER
try {
const privateKey = fs.readFileSync('/etc/letsencrypt/live/' + config.DNSROUTER + '/privkey.pem', 'utf8');
const certificate = fs.readFileSync('/etc/letsencrypt/live/' + config.DNSROUTER + '/cert.pem', 'utf8');
const ca = fs.readFileSync('/etc/letsencrypt/live/' + config.DNSROUTER + '/chain.pem', 'utf8');
const options = {
key: privateKey,
cert: certificate,
ca: ca
};
let proxy = httpProxy.createServer({
target: 'ws://localhost:9030',
ssl: {
key: privateKey,
cert: certificate
}
}).listen(9031);
}
catch (e) {
console.log("LETSENCRYPT certificates not found! No SSL!");
console.log(e)
}
/**
* server
*/
let connections = {};
let WebSocketServer = require('ws').Server;
// start WS via HTTP
const wss1 = new WebSocketServer({port: 9030});
wss1.on('connection', function(ws) {
CLIENTS.push(ws);
console.log('connection via HTTP');
ws.on('close', function () {
console.log('close HTTP!');
CLIENTS = CLIENTS.filter(item => item != ws);
})
})
/**
* client
*/
let connect = function() {
console.log(now(), 'Starting server...');
const socket = net.createConnection({ port: config.PORT, host: config.HOST }, () => {
console.log('Connected to server!');
})
socket.on('connect', () => {
console.log(now(), 'Connected to server!');
socket.on('data', data => {
sendAll(data);
});
});
socket.on('error', data => {
console.log(now(), "Connnection refused:", data.errno,data.code,"(IP:", data.address + ":" + data.port + ")");
setTimeout(() => {
socket.removeAllListeners();
console.log(now(),"Reconnecting...");
connect();
}, 1000);
});
socket.on('end', () => {
console.log(now(), 'Disconnected from server');
console.log(now(), "Reconnecting...");
socket.removeAllListeners();
connect();
});
}
connect();
Я надеюсь, что это произведет лучшее впечатление.Спасибо за вашу помощь!