На нашем сервере мы запускаем Apache уже на порту 80, на этом же сервере я хочу обслуживать socket.io, и я хотел бы подключиться к серверу socket.io также на порт 80. Так что я пытался получить Apache для прокси-порт 80. Я нашел это StackOverflow запись: https://serverfault.com/questions/616370/configuring-apache-2-4-mod-proxy-wstunnel-for-socket-io-1-0Настройка Apache 2.4.7 для проксирования socket.io
Что я сделал:
Я включил следующие модули Apache:
a2enmod rewrite proxy proxy_wstunnel
я создал новый сайт в '/etc/apache2/sites-available/mysite.conf', со следующим концом нт:
<VirtualHost subdomain.mydomain.com:80>
Servername subdomain.mydomain.com
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:3001/$1 [P,L]
ProxyPass /socket.io http://localhost:3001/socket.io
ProxyPassReverse /socket.io http://localhost:3001/socket.io
</VirtualHost>
На том же сервере, я сервер socket.io работает на порту 3001:
server.listen('3001', function(){
console.log('Socket.io server listening on *:3001');
});
io.listen(server).on('connection', function(client) {
// Rest of the code
}
И Socket.io клиенты подключаются на этой подобласти сконфигурированной в апача:
var socket = io.connect('http://subdomain.mydomain.com/', {query: {extra_info : extra_info}});
Как только я запускаю клиента. Я не вижу ничего, приходящим в сервер Socket.io регистрации (я добавил много console.log() записей Все, что я вижу в консоли клиента является следующей ошибкой:.
GET http://subdomain.mydomain.com:8100/socket.io/?extra_info=fe4567&EIO=3&transport=polling&t=1416987210079-31 net::ERR_CONNECTION_TIMED_OUT
Если подключить клиентов непосредственно к порту 3001 на сервере Socket.io http://subdomain.mydomain.com:3001
все просто работает нормально (когда я открыть порт 3001 на сервере Apache)
Я бегу следующие версии:.
- Apache : 2.4.7
- Socket.io s ервере & клиента: 1.2.1
EDIT:
Когда я изменить URL подключения в var socket = io.connect('http://subdomain.mydomain.com/', {query: {extra_info : extra_info}});
к http://subdomain.mydomain.com:80
.
я получаю другую ошибку:
GET http://subdomain.mydomain.com/socket.io/?user_id=2&EIO=3&transport=polling&t=1418122378582-40
(index):1 XMLHttpRequest cannot load http://subdomain.mydomain.com/socket.io/?extra_info=sdferr&EIO=3&transport=polling&t=1418122378582-40. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.178.158:8100' is therefore not allowed access. The response had HTTP status code 500.
Я, хотя установка Access-Control-Allow-Origin
заголовка в Apache будет решить эту проблему, но это не так. Я добавил это в файл /etc/apache2/sites-available/mysite.conf
:
Header set Access-Control-Allow-Origin "*"
где этот порт пришел из '.... com: 8100/...'? я не мог видеть это в другой конфигурации ?! – Yazan
Я не понимаю, откуда идет порт 8100. Не удается найти что-либо в файлах конфигурации. –
как насчет конфигурации клиента? или код? – Yazan