Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Не могу соедениться с сервером (https://javascript.ru/forum/node-js-io-js/86404-ne-mogu-soedenitsya-s-serverom.html)

ureech 22.04.2025 20:09

Не могу соедениться с сервером
 
Всем привет. На вебсервере(nginx) крутится сайт. На http. Решил сделать чат, типа поддержки. Нарисовал форму,установил nodejs на сервер. В конфиге (nginx) сайта прописал proxy.
location /chat/ {
 
               proxy_pass http://site.ru:3000;
               proxy_set_header Host $host;
 
}

server.js
const http = require('http');
const WebSocket = require('ws');

const wss = new WebSocket.Server({port:3000 });
wss.on('connection',  function connection(ws) {

  ws.on('message', function incoming(message) {
    console.log('Получено сообщение: %s', message);
});

});


client.js

var ws = new WebSocket('ws://site.ru:3000');

или
var ws = new WebSocket('ws://site.ru/chat/');


Нет соединения. Порт открыт. Если просто запускать node server, работает. Нужный порт слушает.

Целый день провозился(.

Nexus 22.04.2025 21:07

В настройках nginx разве есть смысл указывать доменное имя, если его A-запись все равно указывает на этот же сервер?
Это же бессмысленное обращение к DNS, там можно просто `localhost:3000` или `127.0.0.1:3000` указать.

Цитата:

Сообщение от ureech
Если просто запускать node server, работает.

Просто запуска nginx недостаточно, нужно чтобы и nodejs также отрабатывал ваш скрипт, иначе получиться, что nginx перебрасывает запрос, а принять его некому. В этом случае, вроде как, должна падать 502 ошибка - bad gateway.

Aetae 22.04.2025 21:19

https://nginx.org/en/docs/http/websocket.html

Ну и
proxy_pass htt*!**/!*p://localhost:3000

ureech 23.04.2025 12:29

Да нет,это не влияет. Перенёс чат на другой сайт с https. та же хрень.
Этот код
var https = require('node:https');
var fs = require('node:fs');
const options = {
key:fs.readFileSync('./key.pem'),
cert:fs.readFileSync('./cert.pem')
}

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('hello world\n');
}).listen(3000);


работает. То есть я открываю страницу https://site.ru/chat и вижу hello world

Но код с websocket ни в какую

const HttpsServer = require('node:https').createServer;
var fs = require('node:fs');
const WebSocket = require('ws').Server;

const options = {
key:fs.readFileSync('./key.pem'),
cert:fs.readFileSync('./cert.pem')
}
const server = HttpsServer({options});
const socket = new WebSocket({
    server: server
});

socket.on('connection', (ws) => {
  ws.on('message', (message) => {
    console.log(`Received: ${message}`);
  });
  ws.send('Secure connection established!');
});

server.listen(3000);


В nginx вносил правки. Всё равно(

ureech 23.04.2025 21:23

Разобрался. Нужно было на отдельном поддомене запустить node сервер и потом уже с сайта подключаться к нему.


Часовой пояс GMT +3, время: 02:26.