Скорее всего вы наступаете на стандартные грабли.
Ваш модуль регистрирует обработчик до того как 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.