<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); ">Roman Vasilyev.</span></div><div><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><br></span></div>Прошу прощения за создание нового threada, я подписался на дайджесты (переподписался на сообщения) и не могу ответить непосредственно на письмо.<div><br></div><div><div><br></div><div><div><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><pre style="margin-top: 0em; margin-right: 0em; margin-bottom: 0em; margin-left: 0em; "></pre></span></div><blockquote type="cite"><div><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><pre style="margin-top: 0em; margin-right: 0em; margin-bottom: 0em; margin-left: 0em; ">Скорее всего вы наступаете на стандартные грабли.
</pre></span><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><tt>Ваш модуль регистрирует обработчик до того как NGINX ушел в rewrite </tt></span><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><tt>фазу, поэтому рерайт переменных просто еще не существует на момент </tt></span><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><tt>работы вашего обработчика.</tt></span><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><pre style="margin-top: 0em; margin-right: 0em; margin-bottom: 0em; margin-left: 0em; ">И поидее ваш конфиг должен выглядить как:
location ~* "whatastring" {
my_module off;
}
</pre></span></div></blockquote><div><br></div><div><br></div><div>Собственно так это и работает. Но часто возникает ситуация когда удобнее отключить работу модуля только для whatastring. Размывание конфигов многими локейшнами затрудняет и чтение и поддержку.</div><div><br></div><div>Хендлер модуля регистрируется в NGX_HTTP_ACCESS_PHASE, что вроде как после NGX_HTTP_REWRITE_PHASE.</div><div><br></div><div>Я, кажется, не понимаю каких то базовых принципов работы, так что я просто поясню, что я пытался сделать.</div><div><br></div><div>Насколько я вижу есть 2 основные функции получения значения переменной:</div><div>ngx_http_get_indexed_variable</div><div>ngx_http_get_variable</div><div><br></div><div>Первая требует индекса переменной. Ок, я могу создать переменную при инициализации модуля, но тогда мне потребуются хендлеры переменной на get и set, а вот их как раз хотелось отдать в rewrite модуль. Получить индекс переменной из обработки запроса я не нашел как - требуется структура конфигурации сервера.</div><div><br></div><div>Вторая функция ищет переменную по имени, но у нее загадочный третий параметр key, назначение которого я из исходных текстов не вычленил.</div><div><br></div><div>Собственно вопрос остается, можно ли обратиться к переменной через эти функции из обработчика?</div><br><blockquote type="cite"><div><blockquote style="border-left-color: rgb(85, 85, 238); border-left-style: solid; border-left-width: 0.2em; margin-top: 0em; margin-right: 0em; margin-bottom: 0em; margin-left: 0em; padding-left: 0.85em; font-family: Verdana, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); position: static; z-index: auto; "><pre style="margin-top: 0em; margin-right: 0em; margin-bottom: 0em; margin-left: 0em; ">Добрый день!
Я использую собственный модуль для 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.
</pre></blockquote></div>
<br></blockquote></div></div></body></html>