Apache proxy_wstunnel потоковая передача из порта 8082 в реальный мир через порт 443 - PullRequest
0 голосов
/ 15 января 2020

Я свободно настроил систему потоковой передачи камеры, используя https://github.com/phoboslab/jsmpeg.git

Я использую ffmpeg для вывода потока на https://localhost:8081/...

Используя websocket-relay-secure для подключения к этому порту 8081 к порту 8082

http-server в режиме SSL, обслуживающему страницу на порту 8080, которая включает в себя:

  <canvas id="video-canvas"></canvas>
  <script type="text/javascript" src="jsmpeg.min.js"></script>
  <script type="text/javascript">
    var canvas = document.getElementById('video-canvas');
    var url = 'wss://'+document.location.hostname+':8082/';
    var player = new JSMpeg.Player(url, {canvas: canvas});
  </script>

Когда я go на https://example.com:8080/view-stream.html, он красиво потоковый.

Мне действительно нужно перенаправить этот поток через порт 443 на моем Apache сервере, так как там происходит много других вещей, связанных с этим, и люди, желающие увидеть поток, не могут пройти через что-либо, кроме портов 80 и 443 (очень осторожно ITP people)

У меня есть (или я хочу перевести в потоковое состояние) структура что-то вроде:

https://example.com
|
- /docs
- /otherdocs
- /streaming/cam1     <- where the streaming goes

Так что я бьюсь по голове, пытаясь изменить мой Apache conf файл используя proxy_wstunnel и т.п. (как минимум, я убрал свои ошибки):

<IfModule mod_ssl.c>
<VirtualHost *:443>
  ServerName example.com
  DocumentRoot /var/www/example.com/public
  ErrorLog /var/www/example.com/logs/error.log
  CustomLog /var/www/example.com/logs/access.log combined

SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
Header set Access-Control-Allow-Origin "*"
</VirtualHost>
</IfModule>

Я бы хотел иметь возможность перейти к https://example.com/streaming/cam1 и увидеть там поток на холсте. Это возможно, или я тратил много времени? В идеале я могу добавить cam2 на порт 8084 и c позже.

Далее - добавление решения на случай, если это может помочь другим

Добавление потоков камеры на портах 8083 и 8085

Мой Apache файл conf (работает) теперь:

<IfModule mod_ssl.c>
<VirtualHost *:443>
  ServerName example.com
  DocumentRoot /var/www/example.com/public
  ErrorLog /var/www/example.com/logs/error.log
  CustomLog /var/www/example.com/logs/access.log combined

SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
Header set Access-Control-Allow-Origin "*"
  <Directory "/var/www/example.com/public/streaming/cam1">
    RewriteEngine on
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
    RewriteRule .* wss://localhost:8082      [P,L]
  </Directory>
  <Directory "/var/www/example.com/public/streaming/cam2">
    RewriteEngine on
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
    RewriteRule .* wss://localhost:8084      [P,L]
  </Directory>
  <Directory "/var/www/example.com/public/streaming/cam3">
    RewriteEngine on
    RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
    RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
    RewriteRule .* wss://localhost:8086      [P,L]
  </Directory>
  SSLProxyEngine on
  ProxyPass /streaming/cam1 wss://localhost:8082/
  ProxyPassReverse /streaming/cam1 wss://localhost:8082/
  ProxyPass /streaming/cam2 wss://localhost:8084/
  ProxyPassReverse /streaming/cam2 wss://localhost:8084/
  ProxyPass /streaming/cam3 wss://localhost:8086/
  ProxyPassReverse /streaming/cam3 wss://localhost:8086/
</VirtualHost>
</IfModule>

Там может быть избыточный материал - я открыт для улучшения:)

...