Возможность перенаправить https на http, но не может перенаправить wss на ws - PullRequest
0 голосов
/ 25 апреля 2020

Я работаю с веб-сокетами. В apache я могу перенаправить с https на http, выполнив следующие настройки в файле конфигурации:

      <VirtualHost *:443>
      # Common SSL Config
      ServerName ec2-13-52-248-221.us-west-1.compute.amazonaws.com
      SSLEngine on
      # wss redirects to working ws protocol

            SSLCertificateFile      /etc/ssl/certs/apache-selfsigned.crt
            SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
            ProxyPass "/"  "http://ec2-13-52-248-221.us-west-1.compute.amazonaws.com" retry=0 keepalive=On

      </VirtualHost>

Но такую ​​же конфигурацию (как выше) я изменяю следующим образом

     <VirtualHost *:443>
      # Common SSL Config
      ServerName ec2-13-52-248-221.us-west-1.compute.amazonaws.com
      SSLEngine on
      # wss redirects to working ws protocol

            SSLCertificateFile      /etc/ssl/certs/apache-selfsigned.crt
            SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
            ProxyPass "/wss"  "ws://ec2-13-52-248-221.us-west-1.compute.amazonaws.com:8080" retry=0 keepalive=On

      </VirtualHost>

Я не могу перенаправить с wss на ws

В случае с Wss при отправке запроса я использую URL ниже:

    wss://ec2-13-52-248-221.us-west-1.compute.amazonaws.com:8080/wss

1 Ответ

0 голосов
/ 26 апреля 2020

Через 24 часа усилий Наконец-то я нашел решение: эта конфигурация сработала для меня

Сначала загрузите следующие модули, включив эти модули в файле httpd.conf в windows

proxy_wstunnel_module modules/mod_proxy_wstunnel.so

В linux вы можете включить эти модули с помощью следующих команд

sudo a2enmod proxy proxy_balancer proxy_wstunnel proxy_http

Затем просто добавьте следующие строки в файл apache .conf или файл httpd-vhosts.conf

RewriteEngine on
ProxyRequests Off
ProxyPreserveHost on
ProxyPass /ws ws://192.168.43.31:8080 retry=0 keepalive=On 
ProxyPassReverse /ws  ws://192.168.43.31:8080 retry=0

В Javascript изменения файла выглядят следующим образом:

if(location.protocol === 'http:'){
  var conn = new WebSocket('ws://192.168.43.31/ws');
 }
else{
  var conn = new WebSocket('wss://192.168.43.31/ws');
}

, поэтому с этого apache перенаправит весь запрос, имеющий ws, обратно на порт 8080

...