使用 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,安裝後讓加密ssl網站運作正常

現在我想設定 websocket 伺服器,所以在防火牆中開啟 tcp 連接埠 8445

啟用 apache 模組

a2enmod 代理 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>

example.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] [客戶端 49.34.XX:55961] AH01114: HTTP: 無法連接到後端: example.com [Sat Dec 03 16:47:04.378489 2022] [proidxy ] (111)連線被拒絕:AH00957: wss: 嘗試連線到45.33.XX:8445 (example.com) 失敗

讓我知道這裡是否有人可以幫我解決問題。

謝謝!

答案1

問題似乎是 Apache 代理無法連接到連接埠 8445 上的後端伺服器。

驗證 websocket 伺服器是否正在執行並偵聽連接埠 8445。

sudo netstat -tlnp | grep 8445

如果 websocket 伺服器正在運行,您應該看到如下所示的行:

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

驗證是否沒有防火牆或安全群組阻止連接埠 8445 的流量。

telnet localhost 8445

如果連線成功,您應該會看到一個空白畫面。如果連線被拒絕,可能是防火牆或安全群組阻止了流量。

驗證 websocket 伺服器是否已配置為接受來自 Apache 代理的連線。根據您使用的 websocket 伺服器,這可能涉及設定要偵聽的特定 IP 位址或主機名,或設定存取控制清單 (ACL) 以允許來自 Apache 伺服器 IP 位址的連線。

檢查 websocket 伺服器的日誌,看看是否有任何錯誤訊息指示連線被拒絕的原因。

相關內容