Questa aggiunta alla risposta di @Andrew Moss su come configurare correttamente il VirtualHost
funzionamento con socket.io 1.0! Sentiti libero di saltare la parte su CentOS!
Se sei bloccato su CentOS 6, ecco come farlo:
- Scarica la fonte backport per il
mod_proxy_wstunnel
modulo qui (o clone del Gist o scaricare i file singolarmente)
- Installa tutto il necessario per compilare:
yum install make gcc httpd-devel
- Imposta un ambiente RPM Build (sostanzialmente un utente non privilegiato e alcune directory)
- Copia il
.c
-file nella SOURCES
sottocartella dell'ambiente e il .spec
-file nella SPECS
sottocartella.
- Correre
rpmbuild -ba mod_proxy_wstunnel.spec
- Il pacchetto è ora nella
SRPMS
sottocartella
- Installa il pacchetto:
rpm -i /path/to/package.rpm
- Profitto
Questo caricherà anche automaticamente il modulo in Apache, quindi devi solo riavviarlo con service httpd restart
.
Configurare a VirtualHost
per servire effettivamente il server Socket.io e lo script client (che per impostazione predefinita è disponibile in http://your.server/socket.io/socket.io.js
) è un po 'più complicato su Apache 2.2, a causa di un bug nel mod_proxy
modulo :
Data la seguente regola di riscrittura:
RewriteRule ^/ws(.*)$ ws://localhost:9000/ws [P]
mod_rewrite
considera questo un percorso file in modo che il registro di accesso mostri:
[26/Sep/2013:09:46:07 -0400] "GET /ws://localhost:9000/ws HTTP/1.1" 400 317
Pertanto, non è possibile utilizzare il ws
protocollo in una regola di riscrittura , perché si trasformerà internamente in una richiesta GET HTTP.
C'è una soluzione alternativa però:
<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>
Questo si assicura che tutto ciò che viene inviato /socket.io
vada al ws://
protocollo, tranne la richiesta di polling lungo (che è un meccanismo di fallback quando WebSocket non è disponibile) e la richiesta per la libreria client.
./buildconfig
per creare il file di configurazione. E c'erano un paio di dipendenze che mi ha detto di installare.