Доступ к серверу socket.io через обслуживаемые страницы Apache

Надеюсь, это не выглядит ужасно глупым вопросом, но я изучаю, как реализовать сервер socket.io для моего веб-сайта для создания приложений в реальном времени, но моя проблема в том, что я не могу понять как реализовать указанные приложения в среде Apache. В настоящее время, когда я запускаю node server.js для запуска моего сервера socket.io, я должен получить к нему доступ, посетив http://localhost:XXXX, где XXXX - это любой порт, к которому я прикрепляю его, естественно. Я не хочу, чтобы мой сайт был вынужден быть просмотрен на альтернативном порту, как это, но я, очевидно, не могу подключить сервер к порту 80, поскольку Apache его прослушивает.

Очевидно, что естественным решением было бы остановить службу Apache, а затем node сервер на порту 80, чтобы избежать столкновения, но я не хочу жертвовать всеми функциональными возможностями, предлагаемыми Apache. В принципе, я хочу продолжать обслуживать свой сайт через Apache на порту 80 и интегрировать определенные аспекты приложений реального времени через socket.io на порт 3000, скажем.

Есть ли способ сделать это, чтобы избежать вещей, которые я не хочу? Те вещи, которые 1) имеют доступ пользователей к моему сайту с :3000 в URL, 2) отключение Apache, 3) использование iframes.

Спасибо заранее.

Ответ 1

Как правило, вы можете скрыть Node.js с помощью mod_proxy. Немного искал это: https://github.com/sindresorhus/guides/blob/master/run-node-server-alongside-apache.md (старая ссылка умерла, это новая)

Однако Socket.io может быть немного фиктивным (https://github.com/LearnBoost/socket.io/issues/25), поэтому у вас могут возникнуть проблемы с ним.

Поскольку этот билет немного стар, это стоит того. Только не удивляйтесь, если у вас есть проблемы. Вы будете следующей ставкой после того, как будет привязан Node.js toport 80 и будет действовать как обратный прокси для Apache с https://github.com/nodejitsu/node-http-proxy ( все еще находится в стадии разработки).

Оптимальное решение будет запускаться на нем на собственном сервере, и только если вы используете сокет-трафик, перейдите в файл socket.example.com или что-то в этом роде.

Ответ 2

Socket.io имеет несколько транспортных механизмов. Некоторые из них не работают, если вы запускаете Apache как обратный прокси-сервер, но некоторые делают это. Транспорты, которые не работают, - это websocket и flash, но xhr-опрос и jsonp-опрос должны работать.

Здесь приведен пример настройки опции конфигурации транспорта для socket.io:

var io = require("socket.io").listen(server);
io.set("transports", ["xhr-polling", "jsonp-polling"]);

В моем Apache я использую обычные именные виртуальные хосты и обратную настройку прокси-сервера, и с этими транспортерами socket.io кажется за работой.