Ошибка с SocketIO с клиентом и Ngnix Server - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть Nginx сервер Ubuntu (https), на котором установлена ​​программа NodeJS, работающая на http-сервере. Http-сервер Nodejs прослушивает подключения socketIO через порт 4001. Я направил / проксировал входящие запросы с Nginx, чтобы указать на этот NodeJS сервер.

При использовании socketio-client с React, Я могу соединиться с localhost: 4001 в качестве URL-адреса соединения на моем компьютере, но когда я устанавливаю NodeJS и React-клиент на Nginx, я не могу правильно подключиться.

Я пытался настроить многие вещи, но сейчас я получаю сообщение об ошибке «Недопустимое пространство имен» на консоли React при попытке подключения. Я вижу начальное соединение на моей консоли NodeJS.

Мой вопрос: где я ошибаюсь при настройке? Я выложу ниже соответствующие блоки кода:

Ngnix:

server {

  root /var/www/example.com/html;
  index index.html index.htm index.nginx-debian.html;

  server_name example.com www.example.com;

  location / {
    try_files $uri $uri/ =404;
  }

  location /socket.io {
    proxy_pass http://localhost:4001;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }  

  listen [::]:443 ssl ipv6only=on; # managed by Certbot
  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {

  if ($host = www.example.com) {
    return 301 https://$host$request_uri;
  } # managed by Certbot


  if ($host = example.com) {
    return 301 https://$host$request_uri;
  } # managed by Certbot

  listen 80;
  listen [::]:80;

  server_name example.com www.example.com;
  return 404; # managed by Certbot
}

Реакция:

 componentDidMount() {

    const url =  `https://example.com/socket.io`;

    this.socket = io.connect(url, {
      transports: ['websocket'],
      rejectUnauthorized: false,
      secure: true
    });

    this.socket.on("connecting", (data) => {
      console.log(data)
    });

    this.socket.on("connect", (data) => {
      console.log('connected')
    });
    this.socket.on("disconnect", (data) => {
      console.log("disconnect", data)
    });

    this.socket.on("message", (payload) => { 
      //...
    });
    this.socket.on("data", (payload) => { ... }
     //...
    });

    this.socket.on("error", (data) => console.log("error", data));
  }

NodeJS:

var httpServer = require("http").createServer()
var ioServer = require("socket.io")
var options = {
    pingTimeout: 1000000,
    pingInterval: 1000
};
var io = new ioServer()
io.attach(httpServer, options)
httpServer.listen(4001)
console.log(`Websocket server started on port: ${4001}...`);

io.on("connection", function connection(client) {
  // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...