Node.js + Apache — https://localhost:3000/socket.io/ ERR_CONNECTION_REFUSED

Я реализую простую игру в Node.js. У меня есть client.js для кода на стороне клиента и server.js, работающий на удаленном сервере, оба из которых используют сокеты для связи на порт 3000.

Я также запускаю Apache на порт 80 и использую ProxyPass в моем файле конфигурации apache, чтобы направить URL-адрес mywebsite.io/agario на мой сервер nodejs.

<Location /agario>
     ProxyPass http://localhost:3000/
     ProxyPassReverse http://localhost:3000/
</Location>

Я также использую облачная вспышка для маршрутизации моего веб-сервера 167.179.xx.xx через URL-адрес https://agario.mywebsite.io для SSL, чтобы я мог использовать HTTPS.

Проблема

Когда я пытаюсь подключиться к своему веб-сайту https://agario.mywebsite.io/agario, я получаю следующую ошибку:

socket.io-1.4.5.js:1 GET https://localhost:3000/socket.io/?EIO=3&transport=polling&t=MakAMgZ net::ERR_CONNECTION_REFUSED

Мне непонятно, почему мой клиентский код пытается подключиться к локальному хосту, когда я указал в коде подключение к удаленному серверу. Потенциально я просто не понимаю, как запустить сервер node.js, так как это мой первый опыт работы с Node.js и сокетами.

клиент.js

...
var socket;
socket = io.connect('https://agario.mywebsite.io/agario');
...

сервер.js

var app = express();
var server = app.listen(3000, listen);

// This call back just tells us that the server has started
function listen() {
  var host = server.address().address;
  var port = server.address().port;
  console.info('Example app listening at http://' + host + ':' + port);
}

app.use(express.static('public'));
var io = require('socket.io')(server);

io.sockets.on('connection',
  function(socket) {
    console.info("We have a new client: " + socket.id);

...

});

Если я пропустил какую-либо важную информацию, пожалуйста, дайте мне знать, и я обновлю свой вопрос, спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 580
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш сервер прослушивает порт 3000, и вы пытаетесь подключиться к нему через порт 443, вы должны попробовать что-то вроде этого

socket.connect('https://ip:3000');

Однако, если вы уверены, что ваш клиент использует тот же порт, что и сервер, или у вас есть переадресация портов, попробуйте использовать netcat, чтобы убедиться, что проблема связана с вашим скриптом, а не с конфигурацией сети:

nc -zv -w1 ip port

спасибо за ваш ответ, я попробую это решение. конечно, прокси-пасс в моей конфигурации apache будет обрабатывать порты?

Barney Chambers 27.02.2019 11:23

бег nc -zv -w1 127.0.0.1 3000 вернулся connection to 127.0.0.1 3000 port [tcp/*] succeeded!

Barney Chambers 27.02.2019 11:28

это означает, что порт 3000 открыт, и сервер слушает, что указывает на мое первое предложение ... ваш клиент использует порт 443, используйте следующее .connect('https://ip:3000')

user10434643 27.02.2019 12:00

Спасибо, Бен. Я попытался перейти на `socket.connect('https://<myip>:3000'), но все еще вижу ошибку

Barney Chambers 27.02.2019 12:28

можете ли вы поделиться конфигурацией ssl вашего сервера, также запустите ее в своем терминале со стороны клиента curl -I https://<myip> и curl -I https://<myip>:3000

user10434643 27.02.2019 12:31

Хорошо, это приводит к некоторым интересным подсказкам. Первый завиток возвращается SSL: certificate subject name (my company name) does not match target host name 'MYIPADDRESS Второй завиток с указанным портом возвращается gnutls_handshake() failed: The TLS connection was non-properly terminated

Barney Chambers 27.02.2019 12:46

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

user10434643 27.02.2019 12:49

Спасибо за вашу помощь, как мне удалить этот неправильный SSL-сертификат с моего сайта?

Barney Chambers 27.02.2019 12:53

запустите те же команды curl, но на этот раз используйте URL вместо IP-адреса

user10434643 27.02.2019 13:05

Другие вопросы по теме