Re: Вопрос по nginx proxy + perl

Maxim Dounin mdounin at mdounin.ru
Wed Sep 26 13:37:19 UTC 2012


Hello!

On Wed, Sep 26, 2012 at 09:23:33AM -0400, actionless wrote:

> Откапываю эту тему. Похожая проблема:
> location ~ /location1 {
>         perl module_name::func;
>         index index.html;
>         root /var/www;
> }
> так перл отрабатывает.
> 
> А в такой ситуации почему-то до перла ничего не доходит:
> location ~ /location2 {
>     perl module_name::func;
>     proxy_pass http://127.0.0.1:8000;
>     proxy_set_header X-Forwarded-For $remote_addr;
>     proxy_connect_timeout 600;
>     proxy_read_timeout 600;
>     proxy_send_timeout 600;
> }

Потому что perl и proxy_pass - оба безусловные обработчики 
запроса, и работать будет только кто-то один.  (Надо, наверное, в 
таких ситуациях ругань добавить при разборе конфига.)

Если хочется сходить на бекенд, а потому результат обработать 
перлом - то можно это сделать, например, с помощью модуля eval 
Валерия Холодкова:

http://grid.net.ru/nginx/eval.ru.html

Если хочется сначала скормить запрос перлу, а потом в зависимости 
от результата идти или не идти на бекенд - то можно это сделать, 
сконфигурировав для хождения на бекенд отдельный location и в 
perl'е по необходимости используя функцию $r->internal_redirect():

http://nginx.org/ru/docs/http/ngx_http_perl_module.html#methods

Maxim Dounin



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