Ich versuche, dem hier befindlichen Tutorial für das Nachrichtensystem mit RatChet PHP zu folgen. https://www.twilio.com/blog/create-php-websocket-server-build-real-time-even-driven-application Meine Domain heißt example.com und hat eine normale HTML-Seite, die ich als normale Website bereitstellen muss. Für das Nachrichtensystem benötige ich den Port 8445.
also ich habe apache2 auf ubuntu 22.04 installiert lets encrypt ssl site funktioniert gut
Jetzt möchte ich einen WebSocket-Server einrichten, also öffne ich den TCP-Port 8445 in der Firewall
aktivierte Apache-Module
a2enmod-Proxy a2enmod-Proxy_http a2enmod-Proxy_wstunnel
Ich habe meine ursprüngliche Domain durch example.com ersetzt
meine conf-Datei ist wie 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>
Und
beispiel.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>
Wenn ich versuche, eine Verbindung herzustellen, erhalte ich den Fehler 503 und das Apache-Protokoll sagt Folgendes:
[proxy_http:error] [pid 20090] [client 49.34.XX:55961] AH01114: HTTP: Verbindung zum Backend konnte nicht hergestellt werden: example.com [Sat Dec 03 16:47:04.378489 2022] [proxy:error] [pid 20091] (111)Verbindung abgelehnt: AH00957: wss: Verbindungsversuch zu 45.33.XX:8445 (example.com) fehlgeschlagen
Lassen Sie mich wissen, ob mir hier jemand bei der Lösung des Problems helfen kann.
Danke!
Antwort1
Das Problem scheint darin zu liegen, dass der Apache-Proxy keine Verbindung zum Backend-Server auf Port 8445 herstellen kann. Zur Fehlerbehebung können Sie einige Dinge überprüfen:
Überprüfen Sie, ob der WebSocket-Server läuft und auf Port 8445 lauscht. Sie können dies mit dem Befehl netstat überprüfen:
sudo netstat -tlnp | grep 8445
Wenn der WebSocket-Server läuft, sollten Sie eine Zeile wie diese sehen:
tcp 0 0 0.0.0.0:8445 0.0.0.0:* LISTEN <websocket server PID>/websocket
Stellen Sie sicher, dass keine Firewalls oder Sicherheitsgruppen den Datenverkehr zu Port 8445 blockieren. Sie können dies überprüfen, indem Sie versuchen, vom Server selbst aus eine Verbindung zum WebSocket-Server herzustellen:
telnet localhost 8445
Wenn die Verbindung erfolgreich ist, sollte ein leerer Bildschirm angezeigt werden. Wenn die Verbindung abgelehnt wird, blockiert möglicherweise eine Firewall oder eine Sicherheitsgruppe den Datenverkehr.
Überprüfen Sie, ob der WebSocket-Server so konfiguriert ist, dass er Verbindungen vom Apache-Proxy akzeptiert. Je nach verwendetem WebSocket-Server kann dies das Festlegen einer bestimmten IP-Adresse oder eines bestimmten Hostnamens zum Abhören oder das Konfigurieren von Zugriffskontrolllisten (ACLs) zum Zulassen von Verbindungen von der IP-Adresse des Apache-Servers umfassen.
Überprüfen Sie die Protokolle des WebSocket-Servers, um festzustellen, ob Fehlermeldungen vorliegen, die darauf hinweisen, warum die Verbindung abgelehnt wird.