Apache 2.4.52 和 Ubuntu 上的 Websocket

Apache 2.4.52 和 Ubuntu 上的 Websocket

我正在尝试按照此处的教程使用 RatChet PHP 进行消息传递系统 https://www.twilio.com/blog/create-php-websocket-server-build-real-time-even-driven-application 我的域名为 example.com,它有普通的 html 页面,需要将其作为普通网站提供。对于消息传递系统,我想要一个端口为 8445

所以我在 ubuntu 22.04 上安装了 apache2,安装了 lets encrypt ssl 网站运行正常

现在我想设置 websocket 服务器,因此在防火墙中打开 tcp 端口 8445

启用 Apache 模块

a2enmod 代理 a2enmod proxy_http a2enmod proxy_wstunnel

我已将原始域名替换为 example.com

我的配置文件是这样的 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

如果 websocket 服务器正在运行,您应该会看到如下一行:

tcp        0      0 0.0.0.0:8445            0.0.0.0:*               LISTEN      <websocket server PID>/websocket

验证没有防火墙或安全组阻止到端口 8445 的流量。您可以通过尝试从服务器本身连接到 websocket 服务器来检查这一点:

telnet localhost 8445

如果连接成功,您应该会看到一个空白屏幕。如果连接被拒绝,则可能是防火墙或安全组阻止了流量。

验证 websocket 服务器是否已配置为接受来自 Apache 代理的连接。根据您使用的 websocket 服务器,这可能涉及设置要侦听的特定 IP 地址或主机名,或配置访问控制列表 (ACL) 以允许来自 Apache 服务器 IP 地址的连接。

检查 websocket 服务器的日志,查看是否有任何错误消息表明连接被拒绝的原因。

相关内容