Я пытаюсь следовать руководству, расположенному здесь, для системы обмена сообщениями с использованием RatChet PHP. https://www.twilio.com/blog/create-php-websocket-server-build-real-time-even-driven-application У меня есть домен example.com, на котором есть обычная HTML-страница, и мне нужно обслуживать его как обычный веб-сайт. Для системы обмена сообщениями мне нужен порт 8445.
Итак, я установил Apache2 на Ubuntu 22.04, установил Lets Encrypt SSL, сайт работает нормально.
Теперь я хочу настроить сервер WebSocket, поэтому открыл TCP-порт 8445 в брандмауэре.
включены модули apache
a2enmod proxy a2enmod proxy_http a2enmod proxy_wstunnel
Я заменил свой исходный домен на example.com
мой файл conf выглядит как example.com.conf
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/public_html/logs/error.log
CustomLog /var/www/example.com/public_html/logs/access.log combined
ProxyRequests Off
ProxyPass / https://example.com:8445/
ProxyPassReverse / https://example.com:8445/
</VirtualHost>
и
пример.com-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
SSLEngine On
SSLProxyEngine On
ServerAdmin [email protected]
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/public_html/logs/error.log
CustomLog /var/www/example.com/public_html/logs/access.log combined
ProxyRequests Off
ProxyPass / wss://example.com:8445/
ProxyPassReverse / https://example.com:8445/
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
<Location />
ProxyPassReverse /
Options FollowSymLinks
Require all granted
</Location>
</VirtualHost>
</IfModule>
Когда я пытаюсь подключиться, я получаю ошибку 503, а в журнале Apache написано следующее:
[proxy_http:error] [pid 20090] [client 49.34.XX:55961] AH01114: HTTP: не удалось установить соединение с бэкендом: example.com [Sat Dec 03 16:47:04.378489 2022] [proxy:error] [pid 20091] (111)В соединении отказано: AH00957: wss: попытка подключения к 45.33.XX:8445 (example.com) не удалась
Дайте мне знать, если кто-нибудь здесь может помочь мне решить проблему.
Спасибо!
решение1
Похоже, проблема в том, что прокси-сервер Apache не может подключиться к внутреннему серверу через порт 8445. Чтобы устранить эту неполадку, можно проверить несколько вещей:
Убедитесь, что сервер websocket запущен и прослушивает порт 8445. Для проверки можно использовать команду netstat:
sudo netstat -tlnp | grep 8445
Если сервер веб-сокетов запущен, вы должны увидеть строку, которая выглядит следующим образом:
tcp 0 0 0.0.0.0:8445 0.0.0.0:* LISTEN <websocket server PID>/websocket
Убедитесь, что нет брандмауэров или групп безопасности, блокирующих трафик на порт 8445. Вы можете проверить это, попытавшись подключиться к серверу веб-сокетов с самого сервера:
telnet localhost 8445
Если подключение прошло успешно, вы должны увидеть пустой экран. Если подключение отклонено, возможно, есть брандмауэр или группа безопасности, блокирующие трафик.
Проверьте, что сервер веб-сокетов настроен на прием соединений с прокси-сервера Apache. В зависимости от используемого сервера веб-сокетов, это может включать установку определенного IP-адреса или имени хоста для прослушивания или настройку списков управления доступом (ACL) для разрешения соединений с IP-адреса сервера Apache.
Проверьте журналы сервера веб-сокетов на предмет наличия сообщений об ошибках, указывающих на причину отклонения соединения.