Re: Вопрос про map, переменные и аргументы

Michael Kechinov sam на mkechinov.ru
Вт Июл 14 20:46:27 UTC 2015


С этим возникла проблема

Собрал NGINX с perl'ом.
Читаю документацию http://nginx.org/ru/docs/http/ngx_http_perl_module.html
В ней написано, что "sub" может быть в контексте location
А "map" может быть только в контексте http.

В итоге, это не работает, потому что тестирование конфига не проходит:
http {
    sub {
        my $r = shift;
        my $ua = $r->header_in("User-Agent");
    }

    add_header X-test "$ua";

    map_hash_max_size 8192;
    map $arg_shop_id $api_shard {
        include /home/rails/nginx_shop_mapping.conf;
    }
}

А это не работает, потому что маппинг происходит задолго до того, как
сработает перловая функция:

http {

    server {
        location {
            sub {
                my $r = shift;
                my $ua = $r->header_in("User-Agent");
            }

            add_header X-test "$ua";
        }
    }

    map_hash_max_size 8192;
    map $arg_shop_id $api_shard {
        include /home/rails/nginx_shop_mapping.conf;
    }
}


Какой посоветуете выход?






2015-07-10 12:01 GMT+03:00 Валентин Бартенев <vbart на nginx.com>:

> On Friday 10 July 2015 10:10:04 Илья Шипицин wrote:
> > чтобы было, как вы хотите, надо чтобы nginx сначала принял запрос
> > полностью, извлек из тела параметр и только после этого спроксировал.
> > на практике nginx проксирует запрос постепенно.
> >
> [..]
>
> На практике он как раз сначала принимает весь запрос
> целиком, а потом только проксирует его на бэкенд, если
> конечно специально не выключить proxy_request_buffering:
> http://nginx.org/r/proxy_request_buffering
>
> Вытащить параметр из тела запроса можно с помощью
> встроенного перла:
> http://nginx.org/en/docs/http/ngx_http_perl_module.html
>
>
> --
> Валентин Бартенев
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>



-- 
*Michael Kechinov <http://linkedin.com/in/mkechinov>* | sam на mkechinov.ru |
+7 950 0099233
Startups development studio: mkechinov.ru | en <http://mkechinov.com>
Personalization for e-commerce: rees46.com
HackDay: hackday.ru
Twitter-wall: twijector.com
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20150714/47b1b47c/attachment.html>


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