Проблемы с подключением на прокси-сервере nginx (возможно, проблема с socket.io) - PullRequest
1 голос
/ 23 января 2020

Надеюсь, что кто-то может помочь с этим, так как я боролся с этим проектом более 2 недель - это сводит меня с ума !!!

Проект У меня работает медиаплеер с открытым исходным кодом на малиновом пи. Я хочу получить к нему доступ через соединение HTTPS, поэтому у меня есть доменное имя, указывающее на мой домашний маршрутизатор. Переадресация портов, указывающая на отдельный сервер с nginx. У меня очень базовая конфигурация c nginx, которая кажется добросовестной, и она отправляет запросы SSL на мой медиасервер.

Ошибка

Когда я перемещаюсь на мой адрес https для медиасервера я могу загрузить страницу и увидеть пользовательский интерфейс для медиаплеера - НО она покрыта «серым» экраном и имеет бесконечное вращающееся колесо. Так что это не полностью загружается.

Когда я go на консоли разработчика Google в Chrome, я получаю эти подсказки / симптомы…

Медиасервер; при нормальных условиях предполагается доступ через HTTP в локальной сети. Существует несколько соединений, которые выглядят следующим образом:

http://192.168.1.7/socket.io/?EIO=3&tran ...

Однако на соединениях HTTPS я получаю множество «красных» записей. Вот так:

GET http://127.0.0.1:3000/socket.io/?EIO=3&transport=polling&t=M_HFcoc net::ERR_CONNECTION_REFUSED

Так что по HTTPS мои запросы идут к 127.0.0.1; когда они должны идти к 192.168.1.7. Кажется, это проблема websocket / socket.io.

Конфиг

error_log  /var/log/nginx/error.log  notice;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;


    #access_log  logs/access.log  main;
access_log off;
    sendfile        on;
    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip  off;
    proxy_buffering off;
    fastcgi_keep_conn on;

    #start server1 section
    server {
      listen        80;
      listen   443 ssl;
       server_name my-domain.com;
       ssl_certificate /etc/letsencrypt/live/my-domain.com/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/my-domain.com/privkey.pem;

        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        underscores_in_headers on;

        access_log  /var/log/nginx/access.log;

        location / {
            proxy_pass http://192.168.1.7/;
            proxy_set_header Host $host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            index  index.php index.html index.htm;
            }
    }
}

Моя попытка исправить

После некоторых исследований я добавил следующее. Внутри блока http, но вне блока местоположения…

upstream io_nodes {
  ip_hash;
  server 192.168.1.7;
}

Затем добавлен новый блок местоположения….

location /socket.io/ {
        proxy_pass http://io_nodes/socket.io/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
    }

Вопросы

Так что моя попытка исправить ничего не дает. Мой первый вопрос: почему мой сервер при прокси на 80-м порту работает, а затем отказывает, когда я пытаюсь использовать SSL? Соединения с Socket.io подходят для HTTP-соединения.

Хотя я провел небольшое исследование на socket.io и nginx - я явно не следовал официальным nginx инструкциям, которые вы можете найти здесь . Я пропустил шаги? Этот ресурс описывает «Добавьте JavaScript код, подобный следующему, в файл, который доставляется вашему клиенту» - я не могу этого сделать. У меня нет контроля над тем, что выдает медиа-сервер.

Может кто-нибудь помочь мне go forward? СПАСИБО!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...