POST data processing with perl

Daniel Podolsky onokonem на gmail.com
Пн Фев 1 23:51:57 MSK 2010


Ну, хорошо. Теперь оно работает :)

Устанавливать has_request_body из функции set_perl - занятие
бестолковое. Надо из обработчика location.

Вопрос - как из обработчика location уйти в другой location, где уже
будут прописаны соответствующие proxy_pass?
Сейчас я делаю internal_redirect на location internal, со всеми
сопутствующими прелестями. Например, кодирую вынутые из тела поста
параметры в uri, и вынимаю их регекспом. Может быть - есть путь
прямее?

И еще несколько сопутствующих вопросов:
1) Как правильно перейти в именовынный локешн? Сейчас я делаю
error_page 345 = @myLocation; return 345;. есть ли более прямые пути?
2) Можно ли уйти в именованный локешн из перлового обработчика? Можно
ли при этом передать переменные?

Спасибо.

Вообще - диаграмма движения запроса по внутренностям nginx могла бы
сильно помочь. Нет ли такой где-нибудь?

2010/2/1 Daniel Podolsky <onokonem at gmail.com>:
> Что-то я совсем не понимаю, как это работает.
>
> Вот пришел запрос. nginx прочел заголовки и выбрал location для
> обработки запроса. Позвал все упомянутые в этом location perl_set,
> видимо - в порядке упоминания.
>
> Одна из perl_set установила обработчик на получение тела. Что
> происходит дальше? Обработка запроса откладывается до возврата из
> обработчика? Или надо самому поспать чутка?
>
> А метод $r->sleep - он как работает? Вот я поставил оброаботчик.
> Обработка запроса откладывается, пока я не вернусь из него?
>
> Мне, как я уже писал, надо из обработчика тела, или из обработчика
> sleep повлият на то, в каком location произойдет окончательная
> обработка запроса и отправка его на бекенд.
>
> Еще - правильно я понимаю, что переменные  $r->valiable, выставленные
> из перла - доступны в конфиге? Не сумел придумать теста, который бы
> надежно ответил мне на этот вопрос...
>
> 2010/2/1 Daniel Podolsky <onokonem at gmail.com>:
>> День добрый!
>>
>> Пишу перловый модуль, который должен выбирать правильный бекенд по
>> имени пользователя, которое приходит в POST.
>>
>> Имею две функции.
>>
>> Первая вызывается через perl_set, определяет, что к нам приехал POST,
>> и устанавливает вторую функцию как обработчик has_request_body.
>>
>> Вопрос номер один - что надо вернуть после установки обработчика? ОК?
>>
>> Обработчик ведет себя странно. То он вызывается, то нет. Определяю это
>> по строчкам в логе.
>>
>> Вопрос номер два - это почему так?
>>
>> Вопрос номер три - как мне, обработав данные POST, заставить nginx
>> проксировать этот запрос без изменений к нужному бекенду? Могу
>> переменную установить, могу редирект сделать внутренний. Как
>> правильно?
>>
>> Спасибо.
>>
>> С уважением,
>> Даниил Подольский.
>>
>


Подробная информация о списке рассылки nginx-ru