Документация:

Английская: Nginx::ReadBody

Русская: Nginx::ReadBody:Russian

NAME

Nginx::ReadBody - Модуль для встроенного perl web-сервера nginx, позволяющий "заглянуть" в тело запроса

Версия 0.01

SYNOPSIS

#nginx.conf (part of)
location /post_here {
 error_page 345 = @get_there;
 error_page 346 = @good_post;
 error_page 347 = @bad_post;

 if ($request_method != POST)
  { return 345; }

 set $read_body_debug  1;
 set $read_body_check  'My::Own::check_userdata';
 set $read_body_done   346;
 set $read_body_nodata 347;
 set $read_body_false  347;

 perl  Nginx::ReadBody::read;
 }

DESCRIPTION

В nginx нет средств, позволяющих принимать решения об обработке запроса на основании информации, содержащейся в его теле. Этот модуль добавляет такие средства.

Методы Nginx::ReadBody

read($request);

Предназначен быть обработчиком того location, с телами запросов в который надо работать.

handler($request, $variableName, $defaultValue, $debug)

Метод извлекает из внутренних структур модуля обработчик, соответствующий содержимому $variableName. Если необходимо, обработчик сначала создается. Не используется, как обработчик location, но вызывается из таковых.

Возвращает указатель на функцию, определенную в $variableName (или $defaultValue).

Функция создается на основе содержимого $variableName (см. ниже) с помощью eval, результат кешируется для повышения производительности.

Параметры метода:

$request

Обект запроса, предоставляемый nginx (см. http://wiki.nginx.org/NginxEmbeddedPerlModule).

$variableName

Имя переменной, определенной в nginx.conf и содержащей описание функции-обработчика.

Варианты описания функции:

Числовой код

Превращается в ссылку на тривиальный метод, возвращающий этот код. Вот так:

$handler = eval "sub { return $variableValue; }";
Имя функции

Например, My::Own::method.

Превращается в ссылку на указанную функцию. Вот так:

$handler = eval "\\&$variableValue";
Описание функции perl

Примерно такое: "sub {...}".

Превращается в ссылку на скомпилированную описанную функцию. Вот так:

$handler = eval $variableValue;

Я вообще не тестировал этот вариант! И сам я им пользоваться никогда не буду - содержимое $variableName С<eval>ится прямо во время выполнения, и к чему это может привести, если в нем будут ошибки - я не знаю.

Если содержимое $variableName не соответствет ни одному из трех вариантов, или если компиляция содержимого в ссылку на функцию по каким-либо причинам не удалась - возвращается ссылка на функцию, просто возвращающую код 500.

$defaultValue

Этот параметр используется вместо содержимого переменной, имя которой указано в $variableName, если она не определена или пределена как пустая строка.

$debug

Определяет уровень логирования. См. $read_body_debug.

variable($request, $variableName, $defaultValue, $debug)

Умный - ну, не совсем тупой - извлекатель переменных, определенных в конфигурации nginx. Не используется, как обработчик location, но вызывается из таковых.

Параметры:

$request

Обект запроса, предоставляемый nginx (см. http://wiki.nginx.org/NginxEmbeddedPerlModule).

$variableName

Имя переменно, содержимое которой надо вернуть.

$defaultValue

Значение, возвращаемое, если переменная не определена или определена как пустая строка. Может быть неопределенным (undef).

Если переменная не определена, а это значение определено - переменная устанавливливается в это значение. И, таким образом, становится определенной на протяжении последующей обработки запроса.

$debug

Определяет уровень логирования. См. $read_body_debug.

Переменные конфигурационного файла nginx.conf, определяюще поведение модуля

$read_body_debug

Определяет, должны ли отладочные сообщения быть записаны в error.log.

Возможные значения:

Число 0 или пустая строка

Значение по умолчанию. Сообщения не записываются в error.log.

Положительное число, например 1 или непустая строка

Отладочные сообщения записываются со всеми подробностями.

Специальное значение '0 but true' или отрицательное число

Отладочные сообщения записываются, но некоторые подробности опускаются.

$read_body_nodata

Ссодержит описание функции (см. handler).

Значение по умолчанию: 400.

Обработчик read() вызывает эту функцию, если переданный ему запрос не содержит тела.

Функция вызывается с одним параметром: объектом запроса (см. http://wiki.nginx.org/NginxEmbeddedPerlModule).

Поведение функции должно быть таким, как если бы она предназначалась быть обработчиком location.

$read_body_check

Содержит описание функции (см. handler).

Значение по умолчанию: '0 but true'. Это означает, что, если эта переменная не определена, запрос будет направлен в функцию, определенную в $read_body_done.

Функция вызывается сразу после получения тела запроса для его проверки.

Функция вызывается с одним параметром: объектом запроса (см. http://wiki.nginx.org/NginxEmbeddedPerlModule).

Вернуть фунция должна TRUE или FALSE (истинное или ложное значение).

$read_body_done

Содержит описание функции (см. handler).

Значение по умолчанию: 500. Это означает, что, если эта переменная не определена, клиенту уйдет код ошибки 500. Это чтобы администратор сразу заметил, что он забыл определить эту переменную.

Запрос передается этой функции, если $read_body_check вернет TRUE.

Функция вызывается с одним параметром: объектом запроса (см. http://wiki.nginx.org/NginxEmbeddedPerlModule).

Поведение функции должно быть таким, как если бы она предназначалась быть обработчиком location.

$read_body_false

Содержит описание функции (см. handler).

Значение по умолчанию: 400.

Запрос передается этой функции, если $read_body_check вернет FALSE.

Функция вызывается с одним параметром: объектом запроса (см. http://wiki.nginx.org/NginxEmbeddedPerlModule).

Поведение функции должно быть таким, как если бы она предназначалась быть обработчиком location.

EXPORT

Не экспортирует ничего.

SEE ALSO

http://wiki.nginx.org/NginxEmbeddedPerlModule.

AUTHOR

Даниил Подольский, <tpaba@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2010 by Daniel Podolsky

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.4 or, at your option, any later version of Perl 5 you may have available.