Ten dodatek do odpowiedzi @Andrew Moss na temat prawidłowej konfiguracji VirtualHost
do pracy z socket.io 1.0! Możesz pominąć część dotyczącą CentOS!
Jeśli utknąłeś na CentOS 6, oto jak to zrobić:
- Pobierz backportowaną źródło dla
mod_proxy_wstunnel
modułu tutaj (albo sklonować GIST lub pobrać pliki indywidualnie)
- Zainstaluj wszystko, co niezbędne do zbudowania:
yum install make gcc httpd-devel
- Skonfiguruj środowisko RPM Build (w zasadzie nieuprzywilejowany użytkownik i niektóre katalogi)
- Skopiuj
.c
plik do SOURCES
podfolderu środowiska, a .spec
plik do SPECS
podfolderu.
- Biegać
rpmbuild -ba mod_proxy_wstunnel.spec
- Pakiet znajduje się teraz w
SRPMS
podfolderze
- Zainstaluj pakiet:
rpm -i /path/to/package.rpm
- Zysk
Spowoduje to również automatyczne załadowanie modułu do Apache, więc wystarczy go ponownie uruchomić service httpd restart
.
Konfigurowanie VirtualHost
serwera do obsługi serwera Socket.io i skryptu klienta (który domyślnie jest dostępny pod http://your.server/socket.io/socket.io.js
) jest nieco bardziej skomplikowane w Apache 2.2, z powodu błędu w mod_proxy
module :
Biorąc pod uwagę następującą zasadę przepisywania:
RewriteRule ^/ws(.*)$ ws://localhost:9000/ws [P]
mod_rewrite
traktuje tę ścieżkę pliku, więc dziennik dostępu pokazuje:
[26/Sep/2013:09:46:07 -0400] "GET /ws://localhost:9000/ws HTTP/1.1" 400 317
Tak więc nie możesz użyć ws
-protocol w regule przepisywania , ponieważ to wewnętrznie zamieni się w żądanie HTTP GET.
Istnieje jednak obejście:
<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>
Daje to pewność, że wszystko wysyłane do /socket.io
idzie do ws://
-protocol, z wyjątkiem wniosku o długim odpytywania (co jest mechanizm awaryjnej gdy WebSockets nie są dostępne) oraz wniosek o Client-Library.
./buildconfig
aby utworzyć plik konfiguracyjny. I było kilka zależności, które kazał mi zainstalować.