@Aqulus

Не работает socket.io через nginx, что делать?

Добрый день, реализую функцию через socket.io. Возникла проблема в том, что через домен не работали сокеты, т.е. https://site.ru:2052 не выдавали ничего, лишь таймаут. Решил проксировать их через nginx.

Код nginx:
location ~* \.io {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;
      proxy_pass http://localhost:2052;
      proxy_redirect off;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }


Теперь у меня сокет находится тут: https://site.ru/socket.io => code:0 и message: Transport unknown, что свойственно для сокетов.

В файле жс создаю коннект
this.socket = io('https://site.ru/socket.io');
console.log(this.socket)


На что получаю ответ от сокетов, что коннекта то нет:
Object { io: {…}, nsp: "/socket.io", json: {…}, ids: 0, acks: {}, receiveBuffer: [], sendBuffer: [], connected: false, disconnected: true, flags: {}, … }


Я уже не знаю, что мне делать. Везде искал, но решения не нашёл. Что может быть? По какой причине он может не работать?

// Полный nginx файл
server {
    server_name site.com;
    listen <Айпи>:80;
    listen <Айпи>:443 ssl ;

    ssl_certificate "/var/www/httpd-cert/site.com_2022-08-07-00-10_28.crt";
    ssl_certificate_key "/var/www/httpd-cert/site.com_2022-08-07-00-10_28.key";


location ~* \.io {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;
      proxy_pass http://localhost:2052;
      proxy_redirect off;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    }

    charset utf-8;

    gzip on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css text/xml application/javascript text/plain application/json image/svg+xml image/x-icon;
    gzip_comp_level 1;

    set $root_path /var/www/site/data/www/site.com;
    root $root_path;
    disable_symlinks if_not_owner from=$root_path;

    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/site.com.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
     }


    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar|swf|ico|7z|doc|docx|map|ogg|otf|pdf|tff|tif|txt|wav|webp|woff|woff2|xls|xlsx|xml)$ {
        try_files $uri $uri/ /index.php?$args;
    }

    location @fallback {
        fastcgi_pass unix:/var/run/site.com.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    include "/etc/nginx/fastpanel2-sites/site/site.com.includes";
    include /etc/nginx/fastpanel2-includes/*.conf;
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Команда netstat показывает порт 2052? Команда telnet site.ru 2052 соединение создаёт? Если порт не открыт - это сразу видно, telnet это раскроет. Возможно доступ к порту просто закрыт firewall-ом...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы