Здравствуйте, столкнулся с следующей задачей:<br>необходимо фильтровать HTTP запросы на уровне nginx, нужно пропускать GET запросы и POST запросы в теле которых валидный XML.<div>Написал на перле следующий модуль (в конце сообщения).</div>

<div>Всё отлично работает, проверяет валидность, адекватно реагирует, НО... в случае валидности POST запроса с XML он не возвращается на обработку nginx'у (не происходит выдача нужного контента ни через proxy_pass, ни через fastcgi_pass, ни через root), возвращает <span style="font-style:inherit;background-color:rgb(255,255,255);color:rgb(34,34,34);line-height:13px">405 Not Allowed.<br>

Пожалуйста подскажите как сделать что-бы продолжалась обработка запроса после проверки перловым модулем?</span></div><div><span style="font-style:inherit;background-color:rgb(255,255,255);color:rgb(34,34,34);line-height:13px"><br>

</span></div><div><span style="font-style:inherit;background-color:rgb(255,255,255);color:rgb(34,34,34);line-height:13px">Модуль:</span></div><div><br></div><div><div>package onlyxml;</div><div><br></div><div>use nginx;</div>

<div>use strict;</div><div>use XML::Simple;</div><div><br></div><div><br></div><div>sub test {</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>my $r = shift;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>if ($r->request_method eq "POST") {</div>

<div><span class="Apple-tab-span" style="white-space:pre">              </span>if ($r->has_request_body(\&post)) {</div><div><span class="Apple-tab-span" style="white-space:pre">                   </span>return 400; # не валидный XML</div><div>

<span class="Apple-tab-span" style="white-space:pre">         </span>} else {</div><div><span class="Apple-tab-span" style="white-space:pre">                     </span>return 401; # пустой запрос</div><div><span class="Apple-tab-span" style="white-space:pre">              </span>}</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>} else {</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>return DECLINED; # не GET запросы</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div>

<div><br></div><div>}</div><div><br></div><div>sub post {</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>my $r = shift;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>$r->send_http_header;</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>my $xs = new XML::Simple();</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>my $hash;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>eval {$hash = $xs->XMLin($r->request_body)};</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>if ($@){</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>return 400; # не валидный</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>} else {</div>

<div><span class="Apple-tab-span" style="white-space:pre">              </span>### TODO: вернуть запрос nginx'у</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>return DECLINED; # Валидный xml</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>}</div>

<div>}</div><div><br></div><div>1;</div><div>__END__</div></div>