Документация:
Английская: 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.