Ceci est ajouté à la réponse de @Andrew Moss sur la manière de configurer correctement le VirtualHostfonctionnement avec socket.io 1.0! N'hésitez pas à sauter la partie sur CentOS!
Si vous êtes bloqué sur CentOS 6, voici comment procéder:
- Téléchargez le code source du
mod_proxy_wstunnelmodule ici (clonez le Gist ou téléchargez les fichiers individuellement).
- Installez tout le nécessaire pour construire:
yum install make gcc httpd-devel
- Installer un environnement de compilation RPM (essentiellement un utilisateur non privilégié et certains répertoires)
- Copiez le
.cfichier -file dans le SOURCESsous - dossier de l'environnement et le .specfichier -file dans le SPECSsous - dossier.
- Courir
rpmbuild -ba mod_proxy_wstunnel.spec
- Le paquet est maintenant dans le
SRPMSsous - dossier
- Installez le paquet:
rpm -i /path/to/package.rpm
- Profit
Cela chargera aussi automatiquement le module dans Apache, il ne vous reste donc plus qu’à le redémarrer service httpd restart.
Configurer VirtualHostpour servir réellement le serveur Socket.io et le script client (qui est disponible par défaut sous http://your.server/socket.io/socket.io.js) est un peu plus compliqué sur Apache 2.2, à cause d'un bogue dans le mod_proxymodule :
Étant donné la règle de réécriture suivante:
RewriteRule ^/ws(.*)$ ws://localhost:9000/ws [P]
mod_rewrite traite ce chemin comme un fichier afin que le journal des accès montre:
[26/Sep/2013:09:46:07 -0400] "GET /ws://localhost:9000/ws HTTP/1.1" 400 317
Donc, vous ne pouvez pas utiliser le wsprotocole -protoc dans une règle de réécriture , car cela se transformerait en interne en une requête HTTP GET.
Il existe cependant une solution de contournement:
<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>
Cela garantit que tout ce qui est envoyé /socket.iova au ws://protocole, à l'exception de la demande d'interrogation longue (qui est un mécanisme de secours lorsque WebSockets n'est pas disponible) et de la demande de la bibliothèque client.
./buildconfigpour créer le fichier de configuration. Et il y avait quelques dépendances qu'il m'a dit d'installer.