У меня есть веб-приложение для стека ламп bitnami, операционная система Ubuntu использует Apache в качестве веб-сервера.Сертификат SSL генерируется с использованием Let's Encrypt.Я могу зайти на сайт по http и https.
Furthermore I am using following stacks:
- nodejs
- socket.io
- redis
Отправка уведомлений на моем локальном компьютере работает нормально, websocket работает.
Но на моем производственном сервере, который работает по https, это не такРабота.Я получаю следующие сообщения об ошибках:
socket.io.js: 2 GET https://mypage.com:3000/socket.io/?EIO=3&transport=polling&t=MNxGNEt net :: ERR_CONNECTION_TIMED_OUT
Вот как мой socket.js
(Сервер) Похоже:
var app = require('http').createServer(handler);
var fs = require('fs');
var io = require('socket.io')(app);
var Redis = require('ioredis');
var redis = new Redis();
// class declaration
var Redis = require('ioredis');
function handler(req, res) {
res.writeHead(200);
res.end('');
}
io.on('connection', function(socket) {});
var redisUserSignedUp = new Redis();
redisUserSignedUp.subscribe('signed-up-channel');
redisUserSignedUp.on('message', function(channel, message) {
message = JSON.parse(message);
io.emit(channel + ':' + message.event, message.data);
});
// run server on port 3000
app.listen(3000, function () {
console.log('Server runs!');
});
В моем производстве я сейчас пытаюсь сделать это так:
var app = require('https').createServer({
key: fs.readFileSync('/opt/bitnami/apache2/conf/serverKey.pem'),
cert: fs.readFileSync('/opt/bitnami/apache2/conf/serverCrt.pem')
}, handler);
var fs = require('fs');
var io = require('socket.io')(app);
var Redis = require('ioredis');
var redis = new Redis();
// class declaration
var Redis = require('ioredis');
function handler(req, res) {
res.writeHead(200);
res.end('');
}
io.on('connection', function(socket) {});
var redisUserSignedUp = new Redis();
redisUserSignedUp.subscribe('signed-up-channel');
redisUserSignedUp.on('message', function(channel, message) {
message = JSON.parse(message);
io.emit(channel + ':' + message.event, message.data);
});
// run server on port 3000
app.listen(3000, function () {
console.log('Server runs!');
});
И я пытаюсь получить к нему доступ так:
var options = {
key: fs.readFileSync('/opt/bitnami/apache2/conf/serverKey.pem'),
cert: fs.readFileSync('/opt/bitnami/apache2/conf/serverCrt.pem'),
requestCert: true
}
var app = require('https').createServer(options, handler);
местный:
const socket = io('http://myapp.test:3000'); // localhost dev Folder is mapped to this .test url
socket.on('signed-in-channel:App\\Events\\UserSignedIn', (data) => {
…
производство:
var socket = io('mypage.com:3000', {secure: true});