perl модуль, возвращение запроса на обработку nginx

Alexey Shilo italex.shilo at gmail.com
Fri Nov 2 17:02:38 UTC 2012


Здравствуйте, столкнулся с следующей задачей:
необходимо фильтровать HTTP запросы на уровне nginx, нужно пропускать GET
запросы и POST запросы в теле которых валидный XML.
Написал на перле следующий модуль (в конце сообщения).
Всё отлично работает, проверяет валидность, адекватно реагирует, НО... в
случае валидности POST запроса с XML он не возвращается на обработку
nginx'у (не происходит выдача нужного контента ни через proxy_pass, ни
через fastcgi_pass, ни через root), возвращает 405 Not Allowed.
Пожалуйста подскажите как сделать что-бы продолжалась обработка запроса
после проверки перловым модулем?

Модуль:

package onlyxml;

use nginx;
use strict;
use XML::Simple;


sub test {
my $r = shift;

if ($r->request_method eq "POST") {
 if ($r->has_request_body(\&post)) {
return 400; # не валидный XML
 } else {
return 401; # пустой запрос
}
 } else {
return DECLINED; # не GET запросы
}

}

sub post {
my $r = shift;

$r->send_http_header;
 my $xs = new XML::Simple();
my $hash;
eval {$hash = $xs->XMLin($r->request_body)};
 if ($@){
return 400; # не валидный
} else {
 ### TODO: вернуть запрос nginx'у
return DECLINED; # Валидный xml
}
}

1;
__END__
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20121102/4c2107ba/attachment.html>


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