<div dir="ltr">С этим возникла проблема<div><br></div><div>Собрал NGINX с perl'ом.</div><div>Читаю документацию <a href="http://nginx.org/ru/docs/http/ngx_http_perl_module.html">http://nginx.org/ru/docs/http/ngx_http_perl_module.html</a></div><div>В ней написано, что "sub" может быть в контексте location</div><div>А "map" может быть только в контексте http.</div><div><br></div><div>В итоге, это не работает, потому что тестирование конфига не проходит:</div><div><font face="monospace, monospace">http {</font></div><div><div><font face="monospace, monospace">    sub {</font></div><div><font face="monospace, monospace">        my $r = shift;</font></div><div><font face="monospace, monospace">        my $ua = $r->header_in("User-Agent");</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    add_header X-test "$ua";</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    map_hash_max_size 8192;</font></div><div><font face="monospace, monospace">    map $arg_shop_id $api_shard {</font></div><div><font face="monospace, monospace">        include /home/rails/nginx_shop_mapping.conf;</font></div><div><font face="monospace, monospace">    }</font></div></div><div><font face="monospace, monospace">}</font></div><div><br></div><div>А это не работает, потому что маппинг происходит задолго до того, как сработает перловая функция:</div><div><br></div><div><div><font face="monospace, monospace">http {</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    server {</font></div><div><font face="monospace, monospace">        location {</font></div><div><div><font face="monospace, monospace">            sub {</font></div><div><font face="monospace, monospace">                my $r = shift;</font></div><div><font face="monospace, monospace">                my $ua = $r->header_in("User-Agent");</font></div><div><font face="monospace, monospace">            }</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">            add_header X-test "$ua";</font></div><div><font face="monospace, monospace">        }</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    map_hash_max_size 8192;</font></div><div><font face="monospace, monospace">    map $arg_shop_id $api_shard {</font></div><div><font face="monospace, monospace">        include /home/rails/nginx_shop_mapping.conf;</font></div><div><font face="monospace, monospace">    }</font></div></div><div><font face="monospace, monospace">}</font></div></div><div><br></div><div><br></div><div>Какой посоветуете выход?</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-07-10 12:01 GMT+03:00 Валентин Бартенев <span dir="ltr"><<a href="mailto:vbart@nginx.com" target="_blank">vbart@nginx.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Friday 10 July 2015 10:10:04 Илья Шипицин wrote:<br>
> чтобы было, как вы хотите, надо чтобы nginx сначала принял запрос<br>
> полностью, извлек из тела параметр и только после этого спроксировал.<br>
> на практике nginx проксирует запрос постепенно.<br>
><br>
</span>[..]<br>
<br>
На практике он как раз сначала принимает весь запрос<br>
целиком, а потом только проксирует его на бэкенд, если<br>
конечно специально не выключить proxy_request_buffering:<br>
<a href="http://nginx.org/r/proxy_request_buffering" rel="noreferrer" target="_blank">http://nginx.org/r/proxy_request_buffering</a><br>
<br>
Вытащить параметр из тела запроса можно с помощью<br>
встроенного перла:<br>
<a href="http://nginx.org/en/docs/http/ngx_http_perl_module.html" rel="noreferrer" target="_blank">http://nginx.org/en/docs/http/ngx_http_perl_module.html</a><br>
<br>
<br>
--<br>
Валентин Бартенев<br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><b><a href="http://linkedin.com/in/mkechinov" target="_blank">Michael Kechinov</a></b> | <a href="mailto:sam@mkechinov.ru" target="_blank">sam@mkechinov.ru</a> | +7 950 0099233<br><div>Startups development studio: <a href="http://mkechinov.ru/" target="_blank">mkechinov.ru</a> | <a href="http://mkechinov.com" target="_blank">en</a></div><div>Personalization for e-commerce: <a href="http://rees46.com" target="_blank">rees46.com</a></div><div>HackDay: <a href="http://hackday.ru/" target="_blank">hackday.ru</a> <br>Twitter-wall: <a href="http://twijector.com" target="_blank">twijector.com</a></div></div></div>
</div>