Re: Цепочка nginx proxy
Hello! On Tue, Mar 24, 2015 at 11:34:21AM +0300, Pavel Mihaduk wrote: Кстати, в связи с подчеркиваниями у меня давно вопрос: чего ради было делать дефолт именно таким, какой он есть? Мне в свое время это доставило немало головной боли с uwsgi, когда nginx выбрасывал REQUEST_METHOD :( Потому что в рамках протокола CGI (используемого, в своих вариациях, чуть менее, чем везде, включая переменные $http_... в самом nginx'е) заголовки представляются в виде переменных с именами HTTP_HEADER_NAME, и заголовки с подчёркиваниями - не отличимы от заголовков со стандартным дефисом. Соответственно заголовки с подчёркиванием могут быть использованы для того, чтобы выдать их за какие-либо специальные заголовки (Content-Length, X-Real-IP, whatever). При этом в HTTP - не бывает стандартных заголовков с подчёркиванием, и если вдруг подчёркивание встретилось - это чья-то самодеятельность. Формально, по стандарту HTTP - подчёркивание использовать можно, это обычный символ. Но, в свете вышеизложенного, обрабатывать такие заголовки и пропускать их на бекенды - плохая идея. -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Цепочка nginx proxy
Может, хотя бы для uwsgi сделать исключение? Он как раз ожидает подчеркивания. On 24 March 2015 15:12:57 Maxim Dounin wrote: Hello! On Tue, Mar 24, 2015 at 11:34:21AM +0300, Pavel Mihaduk wrote: Кстати, в связи с подчеркиваниями у меня давно вопрос: чего ради было делать дефолт именно таким, какой он есть? Мне в свое время это доставило немало головной боли с uwsgi, когда nginx выбрасывал REQUEST_METHOD :( Потому что в рамках протокола CGI (используемого, в своих вариациях, чуть менее, чем везде, включая переменные $http_... в самом nginx'е) заголовки представляются в виде переменных с именами HTTP_HEADER_NAME, и заголовки с подчёркиваниями - не отличимы от заголовков со стандартным дефисом. Соответственно заголовки с подчёркиванием могут быть использованы для того, чтобы выдать их за какие-либо специальные заголовки (Content-Length, X-Real-IP, whatever). При этом в HTTP - не бывает стандартных заголовков с подчёркиванием, и если вдруг подчёркивание встретилось - это чья-то самодеятельность. Формально, по стандарту HTTP - подчёркивание использовать можно, это обычный символ. Но, в свете вышеизложенного, обрабатывать такие заголовки и пропускать их на бекенды - плохая идея. -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Цепочка nginx proxy
Hello! On Tue, Mar 24, 2015 at 03:36:11PM +0300, Pavel Mihaduk wrote: Может, хотя бы для uwsgi сделать исключение? Он как раз ожидает подчеркивания. С помощью uwsgi_param можно устанавливать любые параметры для uwsgi, заголовкам и их обработке это отношения не имеет (кроме собственно того факта, что HTTP-заголовки превращаются в параметры вида HTTP_* - и это та самая проблема с неотличимостью _ от -). -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Цепочка nginx proxy
Кстати, в связи с подчеркиваниями у меня давно вопрос: чего ради было делать дефолт именно таким, какой он есть? Мне в свое время это доставило немало головной боли с uwsgi, когда nginx выбрасывал REQUEST_METHOD :( On 24 March 2015 01:27:25 Maxim Dounin wrote: Hello! On Mon, Mar 23, 2015 at 05:50:59PM -0400, MereMortals wrote: Добрый день! В интернете решения так и не нашел. Есть такая схема клиент -nginx_1 -nginx_2-apache На nginx_1 настрен GeoIP и в настройках прописано: proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $my_real_ip; proxy_set_header GEOIP_COUNTRY_CODE $geoip_country_code; proxy_set_header GEOIP_COUNTRY_CODE3 $geoip_country_code3; proxy_set_header GEOIP_COUNTRY_NAME $geoip_country_name; proxy_set_header GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code; proxy_set_header GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3; proxy_set_header GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name; proxy_set_header GEOIP_CITY_COUNTRY_NAME2 $geoip_city_country_name; proxy_set_header GEOIP_REGION $geoip_region; proxy_set_header GEOIP_CITY $geoip_city; proxy_set_header GEOIP_POSTAL_CODE $geoip_postal_code; proxy_set_header GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code; proxy_set_header GEOIP_LATITUDE $geoip_latitude; proxy_set_header GEOIP_LONGITUDE $geoip_longitude; Но почему то до apache не доходят заголовки GEOIP_*, но доходят X-Forwarded-For и X-Real-IP. На вход у nginx_2 заголовки приходят, проверено через tcpdump, но почему то он их не проксирует. В чем может быть причина? Не надо использовать символ подчёркивания в HTTP-заголовках, от этого возникает множество ненужных проблем. Если всё же очень надо (e.g., подобный заголовок присылает внешний сервис), то есть директива underscores_in_headers, которая разрешает nginx'у такие заголовки проксировать дальше: http://nginx.org/ru/docs/http/ngx_http_core_module.html#underscores_in_heade rs В данном случае - правильнее будет переименовать заголовки. -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Цепочка nginx proxy
Добрый день! В интернете решения так и не нашел. Есть такая схема клиент -nginx_1 -nginx_2-apache На nginx_1 настрен GeoIP и в настройках прописано: proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $my_real_ip; proxy_set_header GEOIP_COUNTRY_CODE $geoip_country_code; proxy_set_header GEOIP_COUNTRY_CODE3 $geoip_country_code3; proxy_set_header GEOIP_COUNTRY_NAME $geoip_country_name; proxy_set_header GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code; proxy_set_header GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3; proxy_set_header GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name; proxy_set_header GEOIP_CITY_COUNTRY_NAME2 $geoip_city_country_name; proxy_set_header GEOIP_REGION $geoip_region; proxy_set_header GEOIP_CITY $geoip_city; proxy_set_header GEOIP_POSTAL_CODE $geoip_postal_code; proxy_set_header GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code; proxy_set_header GEOIP_LATITUDE $geoip_latitude; proxy_set_header GEOIP_LONGITUDE $geoip_longitude; Но почему то до apache не доходят заголовки GEOIP_*, но доходят X-Forwarded-For и X-Real-IP. На вход у nginx_2 заголовки приходят, проверено через tcpdump, но почему то он их не проксирует. В чем может быть причина? Posted at Nginx Forum: http://forum.nginx.org/read.php?21,257606,257606#msg-257606 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Цепочка nginx proxy
On 23.03.2015 23:50, MereMortals wrote: Есть такая схема клиент -nginx_1 -nginx_2-apache На nginx_1 настрен GeoIP и в настройках прописано: proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $my_real_ip; proxy_set_header GEOIP_COUNTRY_CODE $geoip_country_code; proxy_set_header GEOIP_COUNTRY_CODE3 $geoip_country_code3; proxy_set_header GEOIP_COUNTRY_NAME $geoip_country_name; proxy_set_header GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code; proxy_set_header GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3; proxy_set_header GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name; proxy_set_header GEOIP_CITY_COUNTRY_NAME2 $geoip_city_country_name; proxy_set_header GEOIP_REGION $geoip_region; proxy_set_header GEOIP_CITY $geoip_city; proxy_set_header GEOIP_POSTAL_CODE $geoip_postal_code; proxy_set_header GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code; proxy_set_header GEOIP_LATITUDE $geoip_latitude; proxy_set_header GEOIP_LONGITUDE $geoip_longitude; Но почему то до apache не доходят заголовки GEOIP_*, но доходят X-Forwarded-For и X-Real-IP. На вход у nginx_2 заголовки приходят, проверено через tcpdump, но почему то он их не проксирует. В чем может быть причина? Потому что: http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers http://nginx.org/en/docs/http/ngx_http_core_module.html#ignore_invalid_headers Если вместо proxy_set_header GEOIP_REGION $geoip_region; написать proxy_set_header GeoIP-Region $geoip_region; то такой заголовок тоже пройдет нормально. -- Best regards, Gena ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Цепочка nginx proxy
Hello! On Mon, Mar 23, 2015 at 05:50:59PM -0400, MereMortals wrote: Добрый день! В интернете решения так и не нашел. Есть такая схема клиент -nginx_1 -nginx_2-apache На nginx_1 настрен GeoIP и в настройках прописано: proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $my_real_ip; proxy_set_header GEOIP_COUNTRY_CODE $geoip_country_code; proxy_set_header GEOIP_COUNTRY_CODE3 $geoip_country_code3; proxy_set_header GEOIP_COUNTRY_NAME $geoip_country_name; proxy_set_header GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code; proxy_set_header GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3; proxy_set_header GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name; proxy_set_header GEOIP_CITY_COUNTRY_NAME2 $geoip_city_country_name; proxy_set_header GEOIP_REGION $geoip_region; proxy_set_header GEOIP_CITY $geoip_city; proxy_set_header GEOIP_POSTAL_CODE $geoip_postal_code; proxy_set_header GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code; proxy_set_header GEOIP_LATITUDE $geoip_latitude; proxy_set_header GEOIP_LONGITUDE $geoip_longitude; Но почему то до apache не доходят заголовки GEOIP_*, но доходят X-Forwarded-For и X-Real-IP. На вход у nginx_2 заголовки приходят, проверено через tcpdump, но почему то он их не проксирует. В чем может быть причина? Не надо использовать символ подчёркивания в HTTP-заголовках, от этого возникает множество ненужных проблем. Если всё же очень надо (e.g., подобный заголовок присылает внешний сервис), то есть директива underscores_in_headers, которая разрешает nginx'у такие заголовки проксировать дальше: http://nginx.org/ru/docs/http/ngx_http_core_module.html#underscores_in_headers В данном случае - правильнее будет переименовать заголовки. -- Maxim Dounin http://nginx.org/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru