Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: POST data processing with perl
- To: nginx-ru <nginx-ru@xxxxxxxxx>
- Subject: Re: POST data processing with perl
- From: Daniel Podolsky <onokonem@xxxxxxxxx>
- Date: Mon, 1 Feb 2010 23:51:57 +0300
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=HGj8tdJPq2rxVsWIjWB8rVq2hR70E+KC48CLD1DhTQA=; b=Q4aNFMfVIzgiIA48Onw1YgFTVPAJ6kiBfSxcTWaHyEbzIV+olr3PmzN/hRQOD6OsUu 4+zSdibfjSi9Duw1tviiILFsSQhv4C1m05v+1wmoYqbff9g661kBx2kulUh6pp4x/20G SJFwxicnPw+q3W+vL/iZICe8aJhwBzCcr0C9w=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=eOCXiHLWP4HBJf6PCxe1oLxGFCeBVYWpjfUQJfLJFQrQbx6R2p7attBimb4EcpREF7 VDlgs3zbMUqnXmc9AEPEjD62ENfTNXgfdbww+5OWBqhpFyMZhD+vq+ynAK8GruIDAgOV q6Z720UOihhN9GRNnkR16nTYxgNju/UazX/mA=
- In-reply-to: <d4574cb31002010444i60d9d909l5c1476f4fc6adbd9@xxxxxxxxxxxxxx>
- References: <d4574cb31001311812o1ec3e58axe812fed45afe9652@xxxxxxxxxxxxxx> <d4574cb31002010444i60d9d909l5c1476f4fc6adbd9@xxxxxxxxxxxxxx>
Ну, хорошо. Теперь оно работает :)
Устанавливать 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@xxxxxxxxx>:
> Что-то я совсем не понимаю, как это работает.
>
> Вот пришел запрос. nginx прочел заголовки и выбрал location для
> обработки запроса. Позвал все упомянутые в этом location perl_set,
> видимо - в порядке упоминания.
>
> Одна из perl_set установила обработчик на получение тела. Что
> происходит дальше? Обработка запроса откладывается до возврата из
> обработчика? Или надо самому поспать чутка?
>
> А метод $r->sleep - он как работает? Вот я поставил оброаботчик.
> Обработка запроса откладывается, пока я не вернусь из него?
>
> Мне, как я уже писал, надо из обработчика тела, или из обработчика
> sleep повлият на то, в каком location произойдет окончательная
> обработка запроса и отправка его на бекенд.
>
> Еще - правильно я понимаю, что переменные $r->valiable, выставленные
> из перла - доступны в конфиге? Не сумел придумать теста, который бы
> надежно ответил мне на этот вопрос...
>
> 2010/2/1 Daniel Podolsky <onokonem@xxxxxxxxx>:
>> День добрый!
>>
>> Пишу перловый модуль, который должен выбирать правильный бекенд по
>> имени пользователя, которое приходит в POST.
>>
>> Имею две функции.
>>
>> Первая вызывается через perl_set, определяет, что к нам приехал POST,
>> и устанавливает вторую функцию как обработчик has_request_body.
>>
>> Вопрос номер один - что надо вернуть после установки обработчика? ОК?
>>
>> Обработчик ведет себя странно. То он вызывается, то нет. Определяю это
>> по строчкам в логе.
>>
>> Вопрос номер два - это почему так?
>>
>> Вопрос номер три - как мне, обработав данные POST, заставить nginx
>> проксировать этот запрос без изменений к нужному бекенду? Могу
>> переменную установить, могу редирект сделать внутренний. Как
>> правильно?
>>
>> Спасибо.
>>
>> С уважением,
>> Даниил Подольский.
>>
>
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|