У меня есть среда " Elastic Beanstalk " с масштабируемым сервером, на котором запущено 2 экземпляра Ec2.
В своем корне я предоставляю контент angular 7 с помощью PHP API (используя Codeigniter из папки API). У меня есть socket.io модуль чата в моей папке Node.
Я использую Nginx для настройки проекта Node и PHP в одной среде EB.
Я попробовал другие варианты, изменив свой файл Nginx .conf согласно некоторым исследованиям, но не смог решить проблему.
Здесь мой файл настроек Nginx .CONF для SOCKET.IO .
server {
listen 80;
server_name sub.domain.com;
root /var/app/current/node;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_read_timeout 3600;
proxy_connect_timeout 3600;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
}
}
My socket.io code.
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = 3000;
var socketController = require('./socketController.js')
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});
var nsp = io.of('/namespace');
/**
* Socket for chat message
*/
io.on('connection', function (socket) {
socket.on('client_user_join', socketController.userJoin.bind(null, socket, nsp, io));
socket.on('client_send_chat_message', socketController.sendChatMessage.bind(null, socket, nsp, io));
socket.on('client_received_chat_message', socketController.receivedChatMessage.bind(null, socket, nsp, io));
socket.on('disconnect', socketController.disconnect.bind(null, socket));
});
http.listen(port, function () {
console.log('listening on *:' + port);
});
Я получаю Session ID unknown
на начальном рычаге и через несколько минут я получаю Сбой: Ошибка во время рукопожатия WebSocket: Неожиданный код ответа: 400
Моя ссылка для подключения к сокету
https://sub.domain.com/socket.io/?EIO=3&transport=polling&t=Mtzwcpj&sid=TSMAaNI0KxDuzcIEAA4s
Я уже попробовал следующий вариант.
Попробуйте подключить сервер сокетов, используя разные транспорты.
this.socket = io('https://sub.domain.com/namespace', {transports: ['websocket']});
На стороне AWS включите Stickiness до 1 дня.
Я не понимаю, блокирует ли это конфигурация Nginx, или я должен использовать Radis, чтобы исправить это, так как у меня запущены два экземпляра EC2.