Цепочка модулей в NGINX

Я пишу модуль NGINX на C, для которого требуется доступ к Redis.

Чтобы сделать эти вызовы неблокирующими, я хочу использовать асинхронный доступ к ним (либо с официальным C API для Redis, либо с помощью модуль redis2-nginx).

Я прочитал Руководство Эмиллера и мне кажется, что мне нужно создать «цепочка» модулей. Что-то типа:

Мой модуль анализирует HTTP-запрос, отправляет соответствующий запрос другому модулю, который работает с Redis асинхронно, как «вверх по течению» (?)

В ответе Redis управление возвращается моему модулю, и он завершает ответ HTTP, отправляя данные обратно на сервер.

Чего я не понимаю, так это как реализовать эти цепочки? Я с трудом могу найти хороший пример, кажется, что все встроенные модули NGINX перенаправляют управление на себя (u = r->upstream;)? Есть ли способ указать другой модуль в качестве восходящего?

Благодарим вас за помощь с хорошим примером кода цепочки.


person vinnyspb    schedule 19.01.2015    source источник


Ответы (1)


Наконец, я решил частично реализовать логику с помощью интерфейса LUA (http://wiki.nginx.org/HttpLuaModule). + https://github.com/openresty/lua-resty-redis).

В основном он работает неблокирующим образом, используя подзапросы nginx, но обеспечивает гораздо более простой способ написания модуля. Часть логики (на основе обработчиков) я реализовал с помощью модулей C.

person vinnyspb    schedule 21.01.2015