Dieses Add ist die Antwort von @Andrew Moss , wie man das richtig konfiguriert VirtualHost
, um mit socket.io 1.0 zu arbeiten! Fühlen Sie sich frei, den Teil über CentOS zu überspringen!
Wenn Sie auf CentOS 6 nicht weiterkommen, gehen Sie wie folgt vor:
- Laden Sie die zurückportiert Quelle für das
mod_proxy_wstunnel
Modul hier (entweder Klon der Gist oder laden Sie die Dateien einzeln)
- Installieren Sie alles, was Sie zum Erstellen benötigen:
yum install make gcc httpd-devel
- Einrichten einer RPM-Build-Umgebung (im Grunde genommen ein nicht privilegierter Benutzer und einige Verzeichnisse)
- Kopieren Sie die
.c
-Datei in den SOURCES
Unterordner der Umgebung und die .spec
-Datei in den SPECS
Unterordner.
- Lauf
rpmbuild -ba mod_proxy_wstunnel.spec
- Das Paket befindet sich jetzt im
SRPMS
Unterordner
- Installieren Sie das Paket:
rpm -i /path/to/package.rpm
- Profitieren
Dadurch wird das Modul auch automatisch in Apache geladen, sodass Sie es nur mit neu starten müssen service httpd restart
.
Einrichten eines VirtualHost
tatsächlich dient der Socket.io Server- und Client-Skript (standardmäßig unter ist http://your.server/socket.io/socket.io.js
) ist ein wenig komplizierter auf Apache 2.2, wegen eines Fehlers in dem mod_proxy
Modul :
Unter Berücksichtigung der folgenden Umschreiberegel:
RewriteRule ^/ws(.*)$ ws://localhost:9000/ws [P]
mod_rewrite
Behandelt dies als Dateipfad, sodass das Zugriffsprotokoll Folgendes anzeigt:
[26/Sep/2013:09:46:07 -0400] "GET /ws://localhost:9000/ws HTTP/1.1" 400 317
Sie können das ws
-Protokoll also nicht in einer Rewrite-Regel verwenden , da dies intern zu einer HTTP-GET-Anforderung wird.
Es gibt jedoch eine Problemumgehung:
<VirtualHost *:80>
ServerName your.server
# Proxy socket.io Websocket
RewriteEngine On
# socket.io 1.0+ starts all connections with an HTTP polling request
RewriteCond %{QUERY_STRING} transport=polling [NC]
RewriteRule /(.*) http://localhost:8081/$1 [P]
ProxyRequests Off
# Explicitly send the request for the client-script to HTTP:
ProxyPass /socket.io/socket.io.js http://localhost:8081/socket.io/socket.io.js
ProxyPassReverse /socket.io/socket.io.js http://localhost:8081/socket.io/socket.io.js
# Anything else goes to the WebSocket protocol:
ProxyPass /socket.io/ ws://localhost:8081/socket.io/
ProxyPassReverse /socket.io/ ws://localhost:8081/socket.io/
# Any additional stuff (the actual site) comes here
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
</VirtualHost>
Dies stellt sicher, dass alles, was an gesendet wird, /socket.io
an das ws://
-Protokoll gesendet wird, mit Ausnahme der Anforderung für langes Polling (was ein Fallback-Mechanismus ist, wenn WebSockets nicht verfügbar sind) und der Anforderung für die Client-Bibliothek.
./buildconfig
, um die Konfigurationsdatei zu erstellen. Und es gab ein paar Abhängigkeiten, die ich installieren sollte.