Как настроить WSS (WebSocket Secure) на сервере Apache с учетом того, что уже используется HTTPS (REST API)?

При использовании хостинга с панелью aaPanel и настройке сертификата Let's Encrypt через нее, возникли проблемы с работой WebSocket (wss). В своем скрипте на express сервере WebSocket работает, но при использовании wss://test.example.com/ по протоколу не подключается. При этом пробовали использовать модуль HTTPS, однако сервер apache его не распознает, несмотря на использование того же сертификата и ключа. Как можно исправить данную ситуацию?
  • 20 апреля 2024 г. 22:10
Ответы на вопрос 2
Для настройки WSS (WebSocket Secure) на сервере Apache, уже использующем HTTPS (REST API), вам нужно будет добавить конфигурацию для проксирования WebSocket-запросов к вашему Express серверу.

Вам следует создать виртуальный хост для вашего сайта, включающего в себя настройки для проксирования WebSocket-запросов. Вот пример конфигурации виртуального хоста:

```
<VirtualHost *:443>
    ServerName test.example.com

    SSLEngine on
    SSLCertificateFile /path/to/your/certificate.crt
    SSLCertificateKeyFile /path/to/your/private.key

    <Location />
        ProxyPass http://localhost:3000/  // замените на адрес вашего Express сервера
        ProxyPassReverse http://localhost:3000/  // замените на адрес вашего Express сервера
        ProxyRequests Off
        RewriteEngine on
        RewriteCond %{HTTP:Upgrade} =websocket [NC]
        RewriteRule /(.*) ws://localhost:3000/$1 [P,L] // замените на адрес вашего Express сервера
    </Location>
</VirtualHost>
```

В этой конфигурации мы добавили настройки для проксирования WebSocket-запросов к вашему Express серверу, который работает на порту 3000. Убедитесь, что заменили адрес Express сервера (localhost:3000) на свой собственный.

После того как вы добавите эту конфигурацию, перезапустите сервер Apache для применения изменений. Теперь ваш сайт сможет поддерживать как REST API через HTTPS, так и WebSocket Secure через WSS.
1. Попробуй добавить (нужно исправить путь к сертификатам, айпи + порт в прокси на айпи + порт вебсервера node) 

<VirtualHost *:443>
    ServerName test.example.com

    SSLEngine on
    SSLCertificateFile "/path/to/your/certificate.crt"
    SSLCertificateKeyFile "/path/to/your/private.key"

    <Location />
        ProxyPass "wss://localhost:7000"
        ProxyPassReverse "wss://localhost:7000"
    </Location>
</VirtualHost>


2 Перезагрузить apache

Если не сработает (надо кстати дополнить вопрос, что значит не работает? какой http код? 404?), то проверь логи апача (и что он в целом запускается)

А еще интересно, а ты обычный ws пробовал тыкать непосредственно на боевом сервере, к нему подключается? А локально ты это все делаешь через апач или просто ноду стартуешь и напрямую к ней коннектишься?
Похожие вопросы