Ceci est ajouté à la réponse de @Andrew Moss sur la manière de configurer correctement le VirtualHost
fonctionnement 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_wstunnel
module 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
.c
fichier -file dans le SOURCES
sous - dossier de l'environnement et le .spec
fichier -file dans le SPECS
sous - dossier.
- Courir
rpmbuild -ba mod_proxy_wstunnel.spec
- Le paquet est maintenant dans le
SRPMS
sous - 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 VirtualHost
pour 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_proxy
module :
É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 ws
protocole -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.io
va 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.
./buildconfig
pour créer le fichier de configuration. Et il y avait quelques dépendances qu'il m'a dit d'installer.