LINUX.ORG.RU

Модуль nginx

 , ,


0

1

Есть некоторое кол-во фаз обработки запроса. В каждый хендлер на любой из фаз я получаю от API только ngx_http_request_t. Хендлеры, естественно, вызываю не я — этим занимается сам nginx.

Я хочу в первом своём хендлере определить кое-какие значения и протащить это всё в следующие хендлеры.

Типа:

typedef struct {
    ngx_uint_t x;
} foobar_t;

ngx_int_t
ngx_xxx_preaccess_phase_handler(ngx_http_request_t *request)
{
    foobar_t *foobar;

    foobar = ngx_palloc(request->pool, sizeof(foobar_t));

    foobar->x = 0;

    // и как теперь это передать дальше в контексте этого же реквеста?
}

.......

ngx_int_t
ngx_xxx_access_phase_handler(ngx_http_request_t *request)
{
    // получили доступ к foobar в контексте этого реквеста
}

ngx_int_t
ngx_xxx_request_phase_handler(ngx_http_request_t *request)
{
    // получили доступ к foobar в контексте этого реквеста
}

Но как прикрепиться именно к этому запросу? Иначе определять эти значения придётся в каждом из хендлеров.

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

Плохо искал?

★★★★★

Последнее исправление: deep-purple (всего исправлений: 2)

Альтернативное решение: использовать ассоциативный массив, ключ - ngx_http_request_t, значение - твое значение. В это варианте нужен еще механизм удаления недействительных пар из этого массива.

Но лучше не выделываться и использовать то, что посоветовал Пончик)

dvetutnev
()
Последнее исправление: dvetutnev (всего исправлений: 1)
Ответ на: комментарий от pon4ik

У Nginx есть ещё сюрприз в виде сброса этих контекстов во время внутренних перенаправлений. Если важно сохранять контекст после этого сброса, то можно плотнее зацепиться за запрос, добавив свою функцию очистки через ngx_http_cleanup_add(). Дальше просто проверяешь по списку, была ли такая запись.

i-rinat ★★★★★
()
Ответ на: комментарий от pon4ik

Написал я значит вопрос и убежал заливать бетонную полосу под забор.

Да, спасибо, это работает.

deep-purple ★★★★★
() автор топика
Ответ на: комментарий от dvetutnev

Альтернативное решение

Вот этио точно колхоз. Ну не верил я изначально что Сысоев не предусмотрел такой нужный момент.

deep-purple ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Пока работает. Как доберусь до «перенаправлений» с обменом заголовками и кодами ответа при аутентификации — сообщу, сломалось или нет.

deep-purple ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

ngx_http_cleanup_add

Вобщем пока такой финт ушами не пригодился — все работает как часы, ничего не сбрасывается.

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