После прочтения нескольких статей я по-прежнему не могу наладить связь с socket.io через прокси-сервер nginx.
Ниже мой nginx
конфигурация:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
location ~* \.io {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
Вот как мой node.js
Экспресс-сервер подключен:
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
Кажется, все работает нормально на моей локальной машине разработчика, т.е. Я вижу свое сообщение журнала onConnection, и все коммуникации тоже работают.
Однако на производстве мой браузер получает все действительные ответы, но я не вижу журналов onConnection, и связь через сокет не работает.
Запросы на вкладку сети Chrome (щелкните, чтобы открыть изображение в полном размере)
Возможно, порт 3000 заблокирован брандмауэром на вашем рабочем сервере. Вы можете проверить, открыт ли он, выполнив следующую команду на локальном компьютере разработчика
telnet <ip-address-of-your-production-server> 3000
Это попытается открыть соединение с портом 3000 на производственном сервере. Если вы получаете тайм-аут или отказываетесь, порт не открыт.