Это дополнение к ответу Эндрю Мосса о том, как правильно настроить VirtualHost
работу с socket.io 1.0! Не стесняйтесь пропустить часть о CentOS!
Если вы застряли на CentOS 6, вот как это сделать:
- Загрузите исходный код для
mod_proxy_wstunnel
модуля здесь (либо клонируйте Gist, либо загружайте файлы по отдельности)
- Установите все необходимое для сборки:
yum install make gcc httpd-devel
- Настройка среды сборки RPM (в основном непривилегированный пользователь и некоторые каталоги)
- Скопируйте
.c
-file в SOURCES
подпапку среды и .spec
-file в 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
чтобы создать файл конфигурации. И было несколько зависимостей, которые мне сказали установить.