Isso adiciona à resposta de @Andrew Moss 'sobre como configurar corretamente o VirtualHost
para trabalhar com o socket.io 1.0! Sinta-se livre para pular a parte sobre o CentOS!
Se você está preso no CentOS 6, veja como fazê-lo:
- Faça o download da fonte de backport para o
mod_proxy_wstunnel
módulo aqui (clone o Gist ou faça o download dos arquivos individualmente)
- Instale tudo o necessário para construir:
yum install make gcc httpd-devel
- Configurar um ambiente RPM Build (basicamente um usuário sem privilégios e alguns diretórios)
- Copie o
.c
arquivo-na SOURCES
subpasta do ambiente e o .spec
arquivo-na SPECS
subpasta.
- Corre
rpmbuild -ba mod_proxy_wstunnel.spec
- O pacote está agora na
SRPMS
subpasta
- Instale o pacote:
rpm -i /path/to/package.rpm
- Lucro
Isso também carregará automaticamente o módulo no Apache, então você só precisa reiniciá-lo service httpd restart
.
A configuração de um VirtualHost
para realmente servir o servidor Socket.io e o script do cliente (disponível por padrão em http://your.server/socket.io/socket.io.js
) é um pouco mais complicado no Apache 2.2, devido a um erro no mod_proxy
módulo :
Dada a seguinte regra de reescrita:
RewriteRule ^/ws(.*)$ ws://localhost:9000/ws [P]
mod_rewrite
trata esse caminho de arquivo para que o log de acesso mostre:
[26/Sep/2013:09:46:07 -0400] "GET /ws://localhost:9000/ws HTTP/1.1" 400 317
Portanto, você não pode usar o ws
protocolo-em uma regra de reescrita , porque isso se transformará internamente em uma solicitação HTTP GET.
Existe uma solução alternativa:
<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>
Isso garante que tudo enviado para /socket.io
vá para o ws://
protocolo-, exceto a solicitação de pesquisa longa (que é um mecanismo de fallback quando o WebSockets não está disponível) e a solicitação da biblioteca-cliente.
./buildconfig
para criar o arquivo de configuração. E havia algumas dependências que ele me disse para instalar.