Обновление с удаленного WS до WSS не работает Предупреждение о смешанном контенте - PullRequest
0 голосов
/ 30 мая 2019

У меня дома есть панель управления солнечной панелью, которая работает на каком-то дистрибутиве Linux. Он обслуживает веб-страницу html5 / js через HTTP. (Нет способа настроить SSL на этом хосте)

Я хочу прокси-сервер с NGINX (другой хост), чтобы иметь возможность получить доступ ко всему этому через HTTPS для интеграции с другими системами домашней автоматизации.

Устройство (назовем его Венерой) использует порт 80 (HTTP), 81 (VNC websockify, не приоритет, но приятно иметь), 7890 (ws: //) и 9001 (ws: //)

У меня есть настройка nginx (насколько я знаю) для прослушивания этих портов, так как порты данных веб-страницы жестко заданы в конфигурации (чтобы получить показания информации в системе, он пытается получить их от localhost, поэтому я передаю их от nginx до Венеры)

Я потратил более 4 дней на поиск, попытку настройки и т. Д. В приведенном ниже коде, когда я раскомментирую SSL и сертификаты SSL, я могу подключиться через HTTP.

Полная конфигурация здесь: https://pastebin.com/fgwgsTnF Внутри http config:

   upstream websockets {
    server VENUS-IP:9001;
    server VENUS-IP:7890;

    check interval=3000 rise=2 fall=5 timeout=1000;
   }

   server {
    listen 443 ssl http2;
    server_name nginx.localdomain.nl;

    ssl_certificate /usr/local/etc/nginx/certs/cert.crt;
    ssl_certificate_key /usr/local/etc/nginx/certs/cert.key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    ssl_protocols TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
    ssl_prefer_server_ciphers on;

    add_header Strict-Transport-Security max-age=15768000;

    location /app {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      proxy_pass          http://VENUS-IP;
      proxy_read_timeout  90;

      proxy_redirect      http://VENUS-IP https://nginx.localdomain.nl;
    }     

    server {
        server_name nginx.localdomain.nl;
        listen 9001; # ssl;

        #ssl_certificate /usr/local/etc/nginx/certs/cert.crt;
        #ssl_certificate_key /usr/local/etc/nginx/certs/cert.key;

        location / {
            # redirect all HTTP traffic
            proxy_pass http://websockets;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # WebSocket support
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";             
        }
    }

    server {
        server_name nginx.localdomain.nl;
        listen 81 ssl;

        ssl_certificate /usr/local/etc/nginx/certs/cert.crt;
        ssl_certificate_key /usr/local/etc/nginx/certs/cert.key;

        location /websockify {
        websockify_pass websockets;
        }
    }  
}

Я могу правильно проксировать все по HTTP, но как только я пытаюсь обслуживать WS по HTTPS, происходит сбой с предупреждением о смешанном содержимом. Я пробовал дюжину комбинаций, но все они провалились.

https://community.victronenergy.com/storage/attachments/3384-1559169860907.png

Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 17 июня 2019

Может быть, содержимое веб-страницы имеет URL-адрес веб-сокета, указывающий на небезопасный URI?Возможно, вам следует попытаться настроить NGINX для изменения этого URI при прокси-странице.Я нахожу эту статью о NGINX -> https://www.nginx.com/blog/websocket-nginx/

В комментариях какой-то парень Димитрий просит что-то вроде этого, и ответ такой:


Возможно ли прокси WSS (Безопасный WebSocket: WS через TLS) с nginx?- Да, это работает,

    location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass_request_headers on;
    proxy_pass http://<server ip="">:<server port="">;
    proxy_http_version 1.0;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    }

Проверьте конфигурацию, добавив строки proxy_pass_request_headers и proxy_set_header X-Forwarded-Proto .Если это не сработает, возможно, вам стоит попробовать переписать предложение (https://nginx.org/en/docs/http/ngx_http_proxy_module.html).

С уважением

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