Це додаток до відповіді @Andrew Moss про те, як правильно налаштувати VirtualHostроботу з socket.io 1.0! Не соромтеся пропустити частину про CentOS!
Якщо ви застрягли в CentOS 6, ось як це зробити:
- Завантажте підтримуваний джерело для
mod_proxy_wstunnelмодуля тут (або клонуйте Gist, або завантажуйте файли окремо)
- Встановіть усе необхідне для складання:
yum install make gcc httpd-devel
- Налаштування середовища побудови RPM (в основному непривілейований користувач та деякі каталоги)
- Скопіюйте
.c-файл у SOURCESпідтеки середовища та .spec-файл у SPECSпідпапку.
- Біжи
rpmbuild -ba mod_proxy_wstunnel.spec
- Пакет зараз знаходиться у
SRPMSпідпапці
- Встановіть пакет:
rpm -i /path/to/package.rpm
- Прибуток
Це також автоматично завантажить модуль в Apache, тому вам доведеться просто перезапустити його service httpd restart.
Налаштування VirtualHostсервера і сервера Socket.io та клієнтського скрипту (який за замовчуванням доступний у розділі http://your.server/socket.io/socket.io.js) налаштування Apache 2.2 трохи складніше через помилку в mod_proxyмодулі :
Враховуючи таке правило перезапису:
RewriteRule ^/ws(.*)$ ws://localhost:9000/ws [P]
mod_rewrite трактує цей шлях файлу, тому журнал доступу показує:
[26/Sep/2013:09:46:07 -0400] "GET /ws://localhost:9000/ws HTTP/1.1" 400 317
Отже, ви не можете використовувати ws-protocol у правилі переписання , оскільки це внутрішньо перетвориться на HTTP GET-запит.
Однак існує рішення:
<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>
Це гарантує, що все, на що надсилається, /socket.ioпереходить до ws://-protocol, за винятком запиту на довге опитування (що є резервним механізмом, коли WebSockets недоступні) та запиту для клієнтської бібліотеки.
./buildconfigщоб створити файл налаштування. І було кілька залежностей, які мені сказали встановити.