Це додаток до відповіді @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
щоб створити файл налаштування. І було кілька залежностей, які мені сказали встановити.