Re: Вопрос про map, переменные и аргументы
Michael Kechinov
sam на mkechinov.ru
Ср Июл 15 09:31:37 UTC 2015
С предыдущим пунктом разобрался. Другая проблема - при POST-запросах
и $r->request_body и $r->request_body_file пусты.
POST-запрос:
curl 'http://domain.com/push' -H 'Content-Type:
application/x-www-form-urlencoded; charset=UTF-8' --data
'event=view&shop_id=f95342356fa619749015b7225f3b7db3&ssid=583c5f49-e86b-477b-98f9-87507bf0e3af&count=1&item_id%5B%5D=34753&price%5B%5D=14196&is_available%5B%5D=1'
Конфигурация NGINX:
http {
perl_set $request_shop_id '
sub {
my $r = shift;
if ($r->request_method eq "GET") {
if($r->args =~ /shop_id=([a-z0-9A-Z]+)/ ) {
return "$1";
} else {
return "";
}
} else {
return $r->request_body;
}
}
';
}
В итоге, переменная $request_shop_id пуста.
Где в итоге найти данные, переданные в запросе?
2015-07-14 23:46 GMT+03:00 Michael Kechinov <sam на mkechinov.ru>:
> С этим возникла проблема
>
> Собрал 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
>
--
*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/20150715/5831bae1/attachment.html>
Подробная информация о списке рассылки nginx-ru