Надеюсь, что кто-то может помочь с этим, так как я боролся с этим проектом более 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? СПАСИБО!