ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Embedded perl совместно с прок сированием



Hello!

On Thu, Aug 11, 2011 at 12:48:25AM +0400, Vladimir Stackov wrote:

> Приветствую,
> возникло желание использовать встроенный перл совместно с директивой
> proxy_pass, то есть сначала производит некоторые манипуляции вызываемый
> модуль перла, а затем запрос, в случае возврата DECLINED, переходит к
> бэкэнду.
> 
> Но оказалось, что не так всё просто:
> всё дело в том, что если директива на выполнение модуля перла находится
> перед директивой proxy_pass (i.e. perl smth:sub;\nproxy_pass
> http://..;), то в этом случае модуль просто не исполняется. Если же
> наоборот, то есть proxy_pass перед perl, то в этом случае perl не
> вызывается.

И perl, и proxy_pass - устанавливают безусловный обработчик для 
location'а.  Обработчик один, кто последний его переписал на себя 
- от того и будет использоваться.

При возврате DECLINED обработка переходит в цепочку стандартных 
content-модулей (gzip_static, static, index, autoindex и т.д.)...

> В случае, если в локейшене используется отдача статики с директивой
> root, то всё работает корректно.

... и с ними, действительно, работает.

> В качестве простейшего решения проблемы решил сделать возврат из модуля
> кода ошибки 505, если требуется передача запроса к бэкэнду:
> 
> location / {
>  perl cp::handler;
>  error_page 505 = @index;
> }
> 
> location @index {
>  proxy_pass http://127.0.0.1:8197;
> }
> 
> Является ли подобное исключающее взаимодействие директив proxy_pass и
> perl нормой и если да, то какие возможные пути обхода наиболее
> корректны, кроме вышеприведённого и танцев с бубном при использовании
> proxy_set и условий для передачи в бэкенд?

Наиболее корректно, видимо, будет делать $r->internal_redirect() 
из перла.

Впрочем, возврат ошибки + error_page тоже вполне рабочее решение.

Maxim Dounin

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.