Red Spirit

Блог Алексея Таянчина

RSS 2.0

Запуск Node.JS совместно с веб-сервером Cherokee

Есть веб-сервер Cherokee, который я уже давно использую в своей работе. А так же я еще давно использую замечательный Node.JS в роли сервера для моего чата. И тут мне захотелось разработать какое-нибудь приложеннице на Ноде, чтобы оно выглядело на подобии обычного веб-сайта или веб-сервиса и при этом не висело на каком-то там своем порту, а получало запросы “человеческим” способом, обращаясь к обычному домену на обычном 80-ом порту.

Все это можно сделать использовав только одну Node.JS с модулем для проксирования запросов (чтобы не было проблем с уже работающим веб-сервером), единственно “узкое горлышко” у такого решение – отдача статики. Конечно, есть специальные модули для Ноды, которые организуют отдачу файлов даже с кешированием. Все это не плохо если вы имеет не очень нагруженный ресурс и небольшим количеством статических файлов (те же ассеты – стили, скрипты, картинки шаблона). Однако если у нас что-то более серьезное и предполагается хорошая нагруженность на отдачу файлов, то одной Нодой не обойтись. По своей асинхронной натуре она не очень хорошо справляется с кешированием файлов, да и все заботы сваливать на одну бедную Ноду виднеется мне неуместным.

Гораздо лучше использовать Node.JS в роли бэкенда для “нормального” сервера типа Nginx (который отлично справляется со статикой) или Cherokee (который ему не уступает). Первый вариант я не использую, по этому, как было сказано в заголовке, будем использовать мой любимый Cherokee в качестве фронт-энда и мой любимый Node.JS в качестве бэк-энда. Чероки будет обрабатывать всю статику, если запрошенный файл не существует, значит передает запрос в Ноду. Кроме того с помощью Чероки можно легко настраивать виртуалхосты, различные редиректы, контроль доступа, балансировку нагрузки и даже пресекать хотлинки.

Начнем установку. Считается, что у нас уже установлены свежие версии Cherokee и Node.JS

Шаг 1. Добавим новый Informarion Source

Открываем веб-админку Чероки, заходим во вкладку Source и добавляем туда адрес с портом на котором будет висеть демон Ноды, то есть туда будут передаваться все запросы

1

 

Обратите внимание, что мы указываем тип Remote host. Если бы указали локальный хост (как в PHP интерпретаторе) то надо было бы еще прописывать путь до запускаемого приложения (или как правильно сказать про линукс?), то есть на каждый запрос запускается свой процесс, который отрабатывает, возвращает результат и завершается, так работает PHP, но в нашем случае Нода работает в режиме постоянно запущенного демона, по этому мы выбираем удаленный хост чтобы просто посылать ему запросы.
Поле Nick – любое удобное словосочетание.
Поле Connection - это тот адрес, который прослушивает Нода, указывается любой свободный порт

Шаг 2. Добавление правил для виртуалхоста

2

 

Как видим из скрина, нам надо добавить 2 дополнительных правила. Первое File exists для отдачи статики, а второе Directory для передачи запроса.

Добавляем первое правило - File exists. Настройки выглядят как представлено на скрине, ничего особенного.

3

4

 

Добавляем второе правило:

5

6

7

 

На вкладке Handler важно указать какая будет использоваться балансировка и далее выбрать сервер бэкэнда, там мы указываем то, что создали в Information Source.

На настройкой Чероки – все! Сохраняем настройки и идем запускать Ноду.

Шаг 3. Запуск проверочного скрипта Node.JS

Создаем где-нибудь на своем сервере JS скрипт, который будем запускать с помощью Node.JS. Для наглядности можно даже поместить этот скрипт в той же директории, к которой привязан наш домен. В этом скрипте мы используя стандартные библиотеки создадим простейший веб-сервер, который принимает любой запрос и возвращает его говоря тем самым, что все работает хорошо.

Далее запускаем скрипт командой вроде: # node /var/www/mydomain.ru/test.js

Открываем в браузере свой домен, и если все хорошо, то видим сообщение Ноды. Если не видим, значит что-то сделано не так.
Для проверки загрузите в папку домена какую-нибудь картинку и попробуйте сослаться на нее в браузере, если он откроет вашу картинку значит Чероки успешно вам ее возвратил не передавая запрос Ноде. Если во время обращения к Ноде она не будет работать, то Чероки возвратит нам 502 ошибку, что логично.

Вот вроде и все. Что делать с этим дальше оставим разбираться вашей фантазии.

Categories: Node.JS