Welcome! Log In Create A New Profile

Advanced

Re: accessing variables from a module

Alexander Zheglov
September 08, 2011 02:26PM
Roman Vasilyev.

Прошу прощения за создание нового threada, я подписался на дайджесты (переподписался на сообщения) и не могу ответить непосредственно на письмо.


> Скорее всего вы наступаете на стандартные грабли.
>
> Ваш модуль регистрирует обработчик до того как NGINX ушел в rewrite фазу, поэтому рерайт переменных просто еще не существует на момент работы вашего обработчика.
> И поидее ваш конфиг должен выглядить как:
>
> location ~* "whatastring" {
> my_module off;
> }
>


Собственно так это и работает. Но часто возникает ситуация когда удобнее отключить работу модуля только для whatastring. Размывание конфигов многими локейшнами затрудняет и чтение и поддержку.

Хендлер модуля регистрируется в NGX_HTTP_ACCESS_PHASE, что вроде как после NGX_HTTP_REWRITE_PHASE.

Я, кажется, не понимаю каких то базовых принципов работы, так что я просто поясню, что я пытался сделать.

Насколько я вижу есть 2 основные функции получения значения переменной:
ngx_http_get_indexed_variable
ngx_http_get_variable

Первая требует индекса переменной. Ок, я могу создать переменную при инициализации модуля, но тогда мне потребуются хендлеры переменной на get и set, а вот их как раз хотелось отдать в rewrite модуль. Получить индекс переменной из обработки запроса я не нашел как - требуется структура конфигурации сервера.

Вторая функция ищет переменную по имени, но у нее загадочный третий параметр key, назначение которого я из исходных текстов не вычленил.

Собственно вопрос остается, можно ли обратиться к переменной через эти функции из обработчика?

> Добрый день!
>
> Я использую собственный модуль для nginx и столкнулся со следующей проблемой.
>
> Предполагалась следующая конфигурационная структура для иллюстрации идеи:
>
> location / {
> my_module_command param;
>
> if ( $request_uri ~* "whatastring" ) {
> set $my_module_ignore 1;
> }
>
> root /;
> }
>
> Переменная my_module_ignore по задумке должна была поддерживаться модулем
> rewrite. Я не могу найти механизма, который бы мне позволил обратиться к
> переменным не моего модуля на чтение из handlera моего модуля. Обычный способ -
> посмотреть как уже сделано - не сработал. Я плохо искал, такого механизма нет
> или такой механизм вреден?
>
> Похожая идея есть у proxy_module в команде cache_proxy_bypass, но, насколько я
> вижу значение заносится в дальнейшем в структуру upstream (хотя я не разобрался
> даже как оно вычисляется), а мне хотелось бы получить просто доступ на чтение к
> переменной модуля rewrite.
>
>
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

accessing variables from a module

Alexander Zheglov September 08, 2011 01:54PM

Re: accessing variables from a module

Roman Vasilyev September 08, 2011 02:04PM

Re: accessing variables from a module

Alexander Zheglov September 08, 2011 02:26PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 126
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready