accessing variables from a module
Alexander Zheglov
tolko.bi.vyzhit на gmail.com
Чт Сен 8 18:23:55 UTC 2011
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.
>
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20110908/b2a8a135/attachment-0001.html>
Подробная информация о списке рассылки nginx-ru