ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Модули: когда у ngx_http_variable_t срабатывает get_handler и set_handler?



Hello!

On Thu, Nov 14, 2013 at 09:15:46PM +0400, Igor 'Lo' (И.L.) wrote:

> Есть filter module, в ходе работы которого задается одна переменная
> (ngx_http_variable_t).
> 
> Причем у переменной определен только get_handler с сигнатурой
> that_variable_code(ngx_http_request_t *r,  ngx_http_variable_value_t *v,
> uintptr_t data).
> 
> Вопрос: что такое set_handler у переменных? Почему, хотя он не задан, в
> get'е получается выполнить процессинг данных ngx_http_request_t и присвоить
> значение?

Обработчик set_handler - это такая функция, которая будет вызвана 
кодом

    set $your_variables "some value";

E.g., при выполнении кода rewrite-модуля "set $args 'foo'" - в 
r->args записывается соответствующая строка.

> Второй вопрос: допустим, я хочу добавить еще одну переменную. Но при этом
> получение значений для обеих переменных выполняется один раз (тяжелая
> инициализация..). Куда можно запихнуть в ngx_http_request_t свое значение
> так, чтобы его смогли забрать оба get_handler'а? (учитывая то, что
> http_request_t вроде как может использоваться для нескольких запросов)

В контекст модуля.  Смотреть ngx_http_set_ctx(), 
ngx_http_get_module_ctx().

> Третий вопрос: каким образом можно задать значение строковой переменной,
> находясь в header filter и зная имя переменной (строку)?

Лучше всего - не пытаться ставить чужие переменные, а 
предоставлять свои с нужными значениями.

Но если очень хочется, то пример можно посмотреть в том же модуле 
rewrite (директива set) и/или в auth request.  Общий смысл в том, 
что нужно знать индекс переменной (получить его на этапе 
конфигурации), и записать нужное значение в r->variables[index], а 
если у директивы есть set_handler - то позвать его.

-- 
Maxim Dounin
http://nginx.org/en/donation.html

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.