ПРОЕКТЫ 


  АРХИВ 


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: accessing variables from a module


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: accessing variables from a module
  • From: Alexander Zheglov <tolko.bi.vyzhit@xxxxxxxxx>
  • Date: Thu, 8 Sep 2011 22:23:55 +0400
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:content-type:subject:date:message-id:to:mime-version:x-mailer; bh=NP21BVxsH7BadiHUe8NKoGGQnqnke/dILFvEjzg5pDY=; b=t7QlbFjY1eXoTX9LH3j7MEN+fLuoTunxKRJ8U7cLns074IHmqeeHuXIgpUnCyBNhkN aNH3RSIa6d3O4UeM4eoLpiPXxlxMi/YEH0Y2VO7+ji8Vs+jpxtBZ4I9XPuxMV8yPxzq1 JM+LLLQSvz3iCKrqmheVADmt8xglw+F/0pLVw=

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@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.