Большую часть дня потратили на поиски решения, но пришли с пустыми руками.
Если я запускаю свой сайт по HTTP, соединение ws работает отлично:
this.conn = new WebSocket('ws://example.com:8080');
this.conn.onopen = () => {};
Но как только я переключаюсь на HTTPS (сертификат установлен, а не самоподписан), соединение с веб-сокетом перестает работать, поскольку современные браузеры не разрешают незащищенное соединение с веб-сокетом на веб-сайте, обслуживаемом через HTTPS.
Поэтому я изменяю соединение JS на:
this.conn = new WebSocket('wss://example.com:8080');
this.conn.onopen = () => {};
Теперь соединение wss на некоторое время зависает (в ожидании), наконец, браузер возвращает:
WebSocket connection to 'wss://example.com:8080/' failed: WebSocket opening handshake timed out
Я понимаю, почему это происходит, так как я не настроил порт 8080 для обработки wss, но я тут потерян.
Я запускаю Plesk Onyx 17.8.11 на сервере, и я сделал следующее (прочитав столько, сколько смог найти по теме):
Включено proxy_wstunnel
через Инструменты и настройки> Веб-сервер Apache> Модули Apache
Добавлены следующие строки в Веб-сайты и домены> Настройки Apache & nginx> Дополнительные директивы для HTTP и Дополнительные директивы для HTTPS:
ProxyPass / ws://example.com:8080
ProxyPassReverse / ws://example.com:8080
Но это полностью нарушает Apache (ошибка 500).
Изменение на:
ProxyPass /ws ws://example.com:8080
ProxyPassReverse /ws ws://example.com:8080
А затем изменить вызов JS на:
this.conn = new WebSocket('wss://example.com:8080/ws');
Приводит к той же ошибке рукопожатия, что и раньше.
Кто-нибудь знает, как настроить безопасные веб-сокеты с помощью Plesk? Я нашел кучу статей и постов, в которых рассказывается об изменении файлов конфигурации apache напрямую, но Plesk это совсем не нравится, поэтому решение с Plesk - это то, что мне действительно нужно. Похоже, что они игнорировали другие запросы пользователей Plesk на их собственном форуме, задающие тот же вопрос, поэтому я и задаю SO гуру;)