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