Re: Цепочка nginx proxy

2015-03-24 Пенетрантность Maxim Dounin
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

2015-03-24 Пенетрантность Pavel Mihaduk
Может, хотя бы для 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

2015-03-24 Пенетрантность Maxim Dounin
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

2015-03-24 Пенетрантность Pavel Mihaduk
Кстати, в связи с подчеркиваниями у меня давно вопрос: чего ради было делать 
дефолт именно таким, какой он есть? Мне в свое время это доставило немало 
головной боли с 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

2015-03-23 Пенетрантность MereMortals
Добрый день!

В интернете решения так и не нашел.

Есть такая схема

клиент -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

2015-03-23 Пенетрантность Gena Makhomed

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

2015-03-23 Пенетрантность Maxim Dounin
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