Websocket работает только с ws: //, но не с wss: // - PullRequest
0 голосов
/ 15 марта 2019

У меня есть один сайт, настроенный для работы с ssl. Каждый полученный запрос я перенаправляю на https. Недавно я реализовал на нем веб-сокет, и он отлично работает при разработке, поэтому, когда я запускаю в производство, я начал получать эту ошибку Firefox can’t establish a connection to the server at wss://

Я создал новый языковой стандарт только для подключения к моей веб-розетке, которая находится в производстве. Когда я подключаюсь, используя ws://domain, это работает, когда я изменяю на wss://domain, я получаю сообщение об ошибке.

Я использую Ubuntu 18:04, Apache / 2.4.18 и кабель действий Rails.

Мой Дух

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin contato@domain.com
    DocumentRoot /var/www/domain.com/public
    ProxyRequests off
    ProxyPreserveHost On
    LogLevel error

    <Location />
        Order allow,deny
        Allow from all
        Require all granted
    </Location>

    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/

    ProxyPass /cable/  ws://127.0.0.1:28080/cable/
    ProxyPassReverse /cable/ ws://127.0.0.1:28080/cable/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:443>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin contato@domain.com
    DocumentRoot /var/www/domain.com/public
    ProxyRequests off
    ProxyPreserveHost On
    LogLevel error

    <Location />
        Order allow,deny
        Allow from all
        Require all granted
    </Location>

    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/

    ProxyPass /cable/  wss://127.0.0.1:28080/cable/
    ProxyPassReverse /cable/ wss://127.0.0.1:28080/cable/

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

На локальном хосте вне домена. Если я звоню exampleSocket = new WebSocket("wss://domain.com/cable/");, я получаю Firefox can’t establish a connection to the server at wss://, но если я звоню exampleSocket = new WebSocket("ws://domain.com/cable/");, соединение работает.

На месте, если я позвоню exampleSocket = new WebSocket("ws://domain.com/cable/");, он не работает из-за ssl, и я получаю SecurityError: The operation is insecure.

Кто-нибудь может помочь с этим?

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Я исправил проблему.Все пошло не так из-за того, что в конфигурационном файле apache указан прокси-пароль.Я изменил файл на этот

<VirtualHost *:80>
    ServerName suaradioonline.com
    ServerAlias www.suaradioonline.com
    ServerAdmin contato@suaradioonline.com.br
    DocumentRoot /var/www/suaradioonline.com/public
    ProxyRequests off
    ProxyPreserveHost On
    LogLevel error

    <Location />
        Order allow,deny
        Allow from all
        Require all granted
    </Location>

    ProxyPass /cable/  ws://127.0.0.1:28080/cable/
    ProxyPassReverse /cable/ ws://127.0.0.1:28080/cable/

    ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:443>
        ServerName suaradioonline.com
        ServerAlias www.suaradioonline.com
        ServerAdmin contato@suaradioonline.com.br
        DocumentRoot /var/www/suaradioonline.com/public
        ProxyRequests off
        ProxyPreserveHost On
        LogLevel error

        <Location />
            Order allow,deny
            Allow from all
            Require all granted
        </Location>

        ProxyPass /cable/  ws://127.0.0.1:28080/cable/
        ProxyPassReverse /cable/ ws://127.0.0.1:28080/cable/

        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Это происходит из-за ProxyPass / совпадения во всех входящих запросах, и запрос /cable/ не был достигнут.

0 голосов
/ 15 марта 2019
<VirtualHost *:80>
    ...
    ProxyPass / http://127.0.0.1:8080/
    ...
    ProxyPass /cable/  ws://127.0.0.1:28080/cable/
    ...
<VirtualHost *:443>
    ...
    ProxyPass / http://127.0.0.1:8080/
    ...
    ProxyPass /cable/  wss://127.0.0.1:28080/cable/

Маловероятно, что ваш неизвестный сервер Websocket может выполнять оба действия ws:// и wss:// на одном и том же порту 28080. Более вероятно, что он может выполнять только ws://, т. Е. Вы должны перенаправить на ws:// для обоих порты 80 и 443. Обратите внимание, что это похоже на то, что вы уже правильно делаете для обычного трафика: и порт 80, и порт 443 перенаправляются на внутренний http://, а не один на http://, а другой на https://.

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