Я реализую простую игру в 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);
...
});
Если я пропустил какую-либо важную информацию, пожалуйста, дайте мне знать, и я обновлю свой вопрос, спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш сервер прослушивает порт 3000, и вы пытаетесь подключиться к нему через порт 443, вы должны попробовать что-то вроде этого
socket.connect('https://ip:3000');
Однако, если вы уверены, что ваш клиент использует тот же порт, что и сервер, или у вас есть переадресация портов, попробуйте использовать netcat, чтобы убедиться, что проблема связана с вашим скриптом, а не с конфигурацией сети:
nc -zv -w1 ip port
бег nc -zv -w1 127.0.0.1 3000 вернулся connection to 127.0.0.1 3000 port [tcp/*] succeeded!
это означает, что порт 3000 открыт, и сервер слушает, что указывает на мое первое предложение ... ваш клиент использует порт 443, используйте следующее .connect('https://ip:3000')
Спасибо, Бен. Я попытался перейти на `socket.connect('https://<myip>:3000'), но все еще вижу ошибку
можете ли вы поделиться конфигурацией ssl вашего сервера, также запустите ее в своем терминале со стороны клиента curl -I https://<myip> и curl -I https://<myip>:3000
Хорошо, это приводит к некоторым интересным подсказкам. Первый завиток возвращается SSL: certificate subject name (my company name) does not match target host name 'MYIPADDRESS Второй завиток с указанным портом возвращается gnutls_handshake() failed: The TLS connection was non-properly terminated
Это то, о чем я подумал, поскольку ваш порт открыт и служба запущена, остается только то, что вы пропустили настройку вашего SSL-протокола. Пожалуйста, примите мой ответ, если он окажется полезным
Спасибо за вашу помощь, как мне удалить этот неправильный SSL-сертификат с моего сайта?
запустите те же команды curl, но на этот раз используйте URL вместо IP-адреса
спасибо за ваш ответ, я попробую это решение. конечно, прокси-пасс в моей конфигурации apache будет обрабатывать порты?