Nginx / FastCGI

Материал из Eludia
Перейти к: навигация, поиск

В рамках Eluida.pm реализован многозадачный сервер, предназначенный для функционирования в качестве FastCGI-backend'а для nginx. В настоящей заметке описана конфигурация для UNIX/Linux; вариант для Windows также имеется, но будет документирован несколько позже.

Обзор конфигурации

В качестве WEB-сервера используется вышеупомянутый nginx, обязательно с модулем ngx_http_fastcgi_module. FastCGI-запросы передаются "тяжёлому" серверу elud по умолчанию через UNIX doman sockets (есть вариант с TCP, но это менее эффективно). Сервер elud имеет основной процесс, который поддерживает фиксированное число (по умолчанию — 2) рабочих процессов.

На старте elud производит следующие действия:

  • ищет свой старый PID;
  • ищет PID и конфигурацию работающего nginx;
  • анализирует конфигурацию, ищет упомянутые там Eludia-приложения и пытается загрузить их;
  • если возникает ошибка (например, при попытке обновления БД) — не стартует;
  • если все приложения загрузились и оказались работоспособными, то создаёт новый socket и начинает его прослушивать;
  • переписывает конфигурацию nginx с учётом нового socket'а и шлёт nginx сигнал на обновление;
  • если в обнаруживает свою старую копию, то шлёт ей сигнал на останов.

Таким образом, если при обновлении ядра или приложения что-то пойдёт не так, у администратора будут хорошие шансы исправить ситуацию, пока в память загружен старый код.

Установка

Прежде всего, следует установить nginx версии не ниже 0.7.62.

Далее, в его директории с конфигурацией создать файл eludia_vhost следующего содержания:

location /i/ {
   expires 30d;
}

location = / {
   include     eludia_fastcgi_pass;
   include     fastcgi_params;
}

location / {
   return 403;
}

и файл eludia_fastcgi_pass с единственной строкой:

fastcgi_pass unix:/tmp/elud;

Теперь каждое Eluia-приложение будет прописываться в nginx.conf вот так:

server { 
 listen  80;                                    # или другой порт, интерфейс и т. п.
 root    /var/projects/my_application/docroot;
 include eludia_vhost; 
}

Можно запускать nginx. Он даст ошибку 504 — пока это нормально.

Надо же всё-таки установить elud.

 ins elud

В результате будет создан пускач /usr/sbin/elud. Испробуем его:

elud start

На консоль должны выдаться загрузочные баннеры ядра для всех приложений, после чего будут постоянно видны 3 процесса elud: один родительский и 2 рабочих. Можно проверить: теперь в eludia_fastcgi_pass имя socket'а изменится. К нему должен приписаться PID родительского процесса. Когда Вы это увидите, nginx уже, скорее всего успеет обработать посланный ему сигнал HUP и новая конфигурация будет актуальной. То есть можно идти в браузер и работать в приложении.

При установке обновлений следует опять отдавать команду

elud start

— это и restart тоже. Для останова предусмотрена

elud stop

, но в случае недоразумения с pid-файлом может и не сработать. Однако killall elud (в особенности -9) никто не отменял.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Разработчику
Администратору
Инструменты