LINUX.ORG.RU

Написание модуля, отправляющего копию входящего на сервер запроса ещё куда-то.


0

0

Реализовал хандлер, который просто видит запросы, складывает прилетевший запросный URI в файл /tmp/123.txt, возвращает NGX_DECLINED (т.е. nginx думает, что мы отказались отрабатывать запрос и продолжает предлагать его другим модулям).

Цель конечная: быть таким модулем, который видит запросы, точно также отказывается их обрабатывать, но при этом ещё отправляющий их копии в другой хрустальный полированный HTTP-сервант.

Пытаюсь заюзать для этого upstream-стафф. Ваще жесть - кодить модули для nginx. Сысоев курил всё что движется и не движится... Не могу осилить, в каком месте указать этому upstream, С КЕМ (адрес+порт) общаться. В структурах есть всё, вплоть до sockaddr_in и т.п., но не хочет же он, чтобы я делал connect() сам. Идея upstream-стаффа в использовании сетевого сокето-юзательного движка nginx, не выполняя в коде модуля блокирующих операций. Модули просто «заказывают» разные ништяки ядру nginx, ставят в очередь и ждут вызова своих коллбеков, если кому интересно...

Спасибо.

http://www.evanmiller.org/nginx-modules-guide.html

недавно сам ваял модифицирующий прокси. мне тот мануал очень хорошо помог.

а Сысоев очень хорошо думал перед тем, как начать делать. потому как разберёшься в этом всём... сразу всё прозрачно и понятно и очень-очень удобно. удобно и в плане расширить и дополнить.

а вам скорее нужно что-то вроде не апстрим стафа пользовать, а прокси-модуль чуть дорисовать. да и вообще все обращения в access.log складываются

gunja
()
Ответ на: комментарий от gunja

Тот мануал - он единственный, он - «первая ссылка» в сборниках мануалов. Отличающихся от него по содержанию - наверное одна штука найдётся)

А Сысоев... Я в положительном смысле) Очень хорошо подумано, зачот.

Апстрим стаф - это структура «ngx_http_upstream_t» и всё что с ней связано. Прокси-модуль ведь на ней ездит. Или нет? )

Спасибо.

mriadus
() автор топика
Ответ на: комментарий от mriadus

> Прокси-модуль ведь на ней ездит

ээээээээ... как бы можно и так сказать. т.е. если есть директива upstream и какая-то из location подсекций запросит сервер апстримовский, только nginx-ядро устанавливает соединение с одним из серверов апстрима, затем отдаёт управление на прокси-модуль. прокси_пасс директива регенерит запрос, сообщает ядру что всё пучком. ядро переговаривается с апстрим-сервером, апстрим-сервер возвращает данные ядру, ядро вызывает пост-обработчик прокси-модуля, ну потом данные по фильтрам, по прочей фигне и к клиенты.

при обработке в прокси-модуле (выбран апстрим или не выбран) уже известны и распарсены заголовки, запрос, и всякая-всякая всячина.

т.е. что проще всего сделать: модифицировать ngx_http_proxy_module.c так, что на команду proxy_pass вы скидываете свои данные в файл (которые интересуют) и не модифицируя остальных данных данные пойдут в полированный сервант.

и снова скажу, все запросы идут в access.log если логирование включено

gunja
()
Ответ на: комментарий от gunja

...директива ничего генерить не может, директива - это надпись, строка, что-то из кофиг-файла )

mriadus
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.