Re: Nginx использует IPv6 в proxy pass, даже если он отключен

2013-08-01 Пенетрантность Antohat
Ruslan Ermilov Wrote:
 Что ж бедному nginx, на каждый чих это проверять?  Ведь сейчас
 может быть не настроен, а через минуту уже настроен.

Проксирование на домен (без апстрима) вроде бы работает корректно (по
крайней мере ошибки в лог больше не пишутся). Т.е. не такая уж это большая
проблема, определять поддержку IPv6.

С распространением IPv6 описанная в топике проблема, когда апстрим
поддерживает IPv6, а сервер с Nginx'ом нет, будет все более актуальна.

Проблема конечно решается самостоятельной сборкой nginx, но это решение не
соответствует стратегии более широкого распространения продукта.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,241405,241444#msg-241444

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx использует IPv6 в proxy pass, даже если он отключен

2013-08-01 Пенетрантность Ruslan Ermilov
On Thu, Aug 01, 2013 at 04:13:32AM -0400, Antohat wrote:
 Ruslan Ermilov Wrote:
  Что ж бедному nginx, на каждый чих это проверять?  Ведь сейчас
  может быть не настроен, а через минуту уже настроен.
 
 Проксирование на домен (без апстрима) вроде бы работает корректно (по
 крайней мере ошибки в лог больше не пишутся). Т.е. не такая уж это большая
 проблема, определять поддержку IPv6.

Вы имеете в виду вариант proxy_pass http://download.exmaple.com ?
Если да, та разницы никакой нет.

В этом случае все IP-адреса (включая IPv6) будут также определены
единожды на этапе чтения конфигурации, после чего все адреса будут
использоваться в режиме round-robin, как и документировано [1]:

: Если доменному имени соответствует несколько адресов, то
: все они будут использоваться по очереди (round-robin).
: Кроме того, в качестве адреса можно указать группу серверов. 

[1] http://nginx.org/r/proxy_pass/ru

Вот живой пример:

server {
location / {
proxy_pass http://lo0.su;
}
}

Из error_log'а, запросы раз в секунду:

2013/08/01 11:05:22 [error] 12561#0: *3 connect() to [2a01:4f8:a0:1064::2]:80 
failed (101: Network is unreachable) while connecting to upstream, client: 
127.0.0.1, server: , request: HEAD / HTTP/1.1, upstream: 
http://[2a01:4f8:a0:1064::2]:80/;, host: 127.0.0.1:8000
2013/08/01 11:05:35 [error] 12561#0: *30 connect() to [2a01:4f8:a0:1064::2]:80 
failed (101: Network is unreachable) while connecting to upstream, client: 
127.0.0.1, server: , request: HEAD / HTTP/1.1, upstream: 
http://[2a01:4f8:a0:1064::2]:80/;, host: 127.0.0.1:8000
2013/08/01 11:05:48 [error] 12561#0: *55 connect() to [2a01:4f8:a0:1064::2]:80 
failed (101: Network is unreachable) while connecting to upstream, client: 
127.0.0.1, server: , request: HEAD / HTTP/1.1, upstream: 
http://[2a01:4f8:a0:1064::2]:80/;, host: 127.0.0.1:8000

То есть 1-й запрос идёт на IPv4-адрес, 2-й - на IPv6, далее начинает
действовать max_fails=1 и fail_timeout=10 для неявных апстримов и
IPv6-адрес временно не используется, спустя ~10 секунд снова пробный
запрос на IPv6, и т.д.

nginx version: nginx/1.4.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) 
configure arguments: --with-debug --with-ipv6

 С распространением IPv6 описанная в топике проблема, когда апстрим
 поддерживает IPv6, а сервер с Nginx'ом нет, будет все более актуальна.

Проблема, если она и есть, не в nginx.  Ваш nginx собран с поддержкой
IPv6, значит при резолвинге имён, как и любая другая прикладная
программа, он получает и IPv4-, и IPv6-адреса.

 Проблема конечно решается самостоятельной сборкой nginx, но это решение не
 соответствует стратегии более широкого распространения продукта.

Не существует универсального способа узнать, что на системе
выключен IPv6.  Кроме того, выключенность IPv6 - это не постоянное
состояние.

Не возвращать IPv6-адреса при резолвинге имён, если в системе не
сконфигурирован IPv6, это в общем случае неправильное поведение.
С другой стороны, во многих прикладных программах доступны опции
командной строки -4 и -6, которые заставляют программу использовать
только IPv4- или только IPv6-адреса.  Я подумаю в эту сторону.

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Nginx использует IPv6 в proxy pass, даже если он отключен

2013-07-31 Пенетрантность Antohat
Добрый день,

На сервере отключен IPv6. На nginx настроено проксирование на upstream c
поддержкой IPv4 и IPv6.

Nginx периодически (раз в 5 секунд) пытается отправлять запросы на IPv6 и
соответственно обламывается с ошибками:

2013/07/30 00:25:06 [error] 1930#0: *1482670 connect() to
[::C:DDD:E:F:GGG:HHH]:443 failed (101: Network is unreachable) while
connecting to upstream, client: AA.BB.CC.DD, server: example.com, request:
GET /download/file HTTP/1.0, upstream:
https://[::C:DDD:E:F:GGG:HHH]:443/download/file;, host:
example.com

Как можно отключить IPv6 для proxy_pass?

# nginx.conf:
upstream download {
  server download.example.com:443;
  keepalive 8;
}

location /download {
  proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
  proxy_set_header  Connection ;
  proxy_ignore_headers  X-Accel-Redirect;
  proxy_http_version1.1;
  resolver  8.8.8.8;
  resolver_timeout  5s;
  proxy_passhttps://download;
}

nginx -V: 
nginx version: nginx/1.4.2
built by gcc 4.7.2 (Debian 4.7.2-5)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
--lock-path=/var/run/nginx.lock
--http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx
--with-http_ssl_module --with-http_realip_module --with-http_addition_module
--with-http_sub_module --with-http_dav_module --with-http_flv_module
--with-http_mp4_module --with-http_gunzip_module
--with-http_gzip_static_module --with-http_random_index_module
--with-http_secure_link_module --with-http_stub_status_module --with-mail
--with-mail_ssl_module --with-file-aio --with-http_spdy_module
--with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt=-Wl,-z,relro
--with-ipv6

uname -a:
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,241403,241403#msg-241403

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx использует IPv6 в proxy pass, даже если он отключен

2013-07-31 Пенетрантность Ruslan Ermilov
On Wed, Jul 31, 2013 at 04:06:27AM -0400, Antohat wrote:
 Добрый день,
 
 На сервере отключен IPv6. На nginx настроено проксирование на upstream c
 поддержкой IPv4 и IPv6.
 
 Nginx периодически (раз в 5 секунд) пытается отправлять запросы на IPv6 и
 соответственно обламывается с ошибками:
 
 2013/07/30 00:25:06 [error] 1930#0: *1482670 connect() to
 [::C:DDD:E:F:GGG:HHH]:443 failed (101: Network is unreachable) while
 connecting to upstream, client: AA.BB.CC.DD, server: example.com, request:
 GET /download/file HTTP/1.0, upstream:
 https://[::C:DDD:E:F:GGG:HHH]:443/download/file;, host:
 example.com
 
 Как можно отключить IPv6 для proxy_pass?

Как-то заставить системный resolver(3) не возвращать IPv6-адреса (ответы
типа ) для хоста, на котором отключен IPv6.  Попробуйте добиться
желаемого эффекта с командой

telnet download.example.com

Или же использовать IPv4-адреса в конфигурации nginx.  Кстати, в
приведенной конфигурации директива resolver не нужна.

 # nginx.conf:
 upstream download {
   server download.example.com:443;
   keepalive 8;
 }
 
 location /download {
   proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
   proxy_set_header  Connection ;
   proxy_ignore_headers  X-Accel-Redirect;
   proxy_http_version1.1;
   resolver  8.8.8.8;
   resolver_timeout  5s;
   proxy_passhttps://download;
 }
 
 nginx -V: 
 nginx version: nginx/1.4.2
 built by gcc 4.7.2 (Debian 4.7.2-5)
 TLS SNI support enabled
 configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
 --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
 --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
 --lock-path=/var/run/nginx.lock
 --http-client-body-temp-path=/var/cache/nginx/client_temp
 --http-proxy-temp-path=/var/cache/nginx/proxy_temp
 --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
 --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
 --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx
 --with-http_ssl_module --with-http_realip_module --with-http_addition_module
 --with-http_sub_module --with-http_dav_module --with-http_flv_module
 --with-http_mp4_module --with-http_gunzip_module
 --with-http_gzip_static_module --with-http_random_index_module
 --with-http_secure_link_module --with-http_stub_status_module --with-mail
 --with-mail_ssl_module --with-file-aio --with-http_spdy_module
 --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat
 -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt=-Wl,-z,relro
 --with-ipv6
 
 uname -a:
 Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux
 
 Posted at Nginx Forum: 
 http://forum.nginx.org/read.php?21,241403,241403#msg-241403

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx использует IPv6 в proxy pass, даже если он отключен

2013-07-31 Пенетрантность ad...@sysadmins.el.kg

31.07.2013 14:06, Antohat пишет:

Добрый день,

На сервере отключен IPv6. На nginx настроено проксирование на upstream c
поддержкой IPv4 и IPv6.

Nginx периодически (раз в 5 секунд) пытается отправлять запросы на IPv6 и
соответственно обламывается с ошибками:

2013/07/30 00:25:06 [error] 1930#0: *1482670 connect() to
[::C:DDD:E:F:GGG:HHH]:443 failed (101: Network is unreachable) while
connecting to upstream, client: AA.BB.CC.DD, server: example.com, request:
GET /download/file HTTP/1.0, upstream:
https://[::C:DDD:E:F:GGG:HHH]:443/download/file;, host:
example.com

Как можно отключить IPv6 для proxy_pass?

# nginx.conf:
upstream download {
   server download.example.com:443;
   keepalive 8;
}

location /download {
   proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
   proxy_set_header  Connection ;
   proxy_ignore_headers  X-Accel-Redirect;
   proxy_http_version1.1;
   resolver  8.8.8.8;
   resolver_timeout  5s;
   proxy_passhttps://download;
}

nginx -V:
nginx version: nginx/1.4.2
built by gcc 4.7.2 (Debian 4.7.2-5)
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
--conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid
--lock-path=/var/run/nginx.lock
--http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx
--with-http_ssl_module --with-http_realip_module --with-http_addition_module
--with-http_sub_module --with-http_dav_module --with-http_flv_module
--with-http_mp4_module --with-http_gunzip_module
--with-http_gzip_static_module --with-http_random_index_module
--with-http_secure_link_module --with-http_stub_status_module --with-mail
--with-mail_ssl_module --with-file-aio --with-http_spdy_module
--with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt=-Wl,-z,relro
--with-ipv6

uname -a:
Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,241403,241403#msg-241403

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Вы используете ipv6? Если нет - попробуйте отключить его в системе. 
Выполните:

sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1
sysctl -w net.ipv6.conf.lo.disable_ipv6=1

и перезапустив nginx попробуйте воспроизвести ошибку. Если ошибка не 
воспроизведется - добавьте в /etc/sysctl.conf это:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx использует IPv6 в proxy pass, даже если он отключен

2013-07-31 Пенетрантность Antohat
Ruslan Ermilov Wrote:
---
 Как-то заставить системный resolver(3) не возвращать IPv6-адреса
 (ответы
 типа ) для хоста, на котором отключен IPv6.  Попробуйте добиться
 желаемого эффекта с командой
 
   telnet download.example.com
Не уверен, что так можно сделать...
Может быть было бы правильнее, чтобы nginx определял, что IPv6 не настроен и
не пытался использовать записи ?
По крайней мере такой параметр в конфиге точно не был бы лишним.

 Или же использовать IPv4-адреса в конфигурации nginx.  Кстати, в
 приведенной конфигурации директива resolver не нужна.
К сожалению не можем, т.к. IP апстрима могут меняться без предварительного
уведомления.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,241405,241407#msg-241407

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx использует IPv6 в proxy pass, даже если он отключен

2013-07-31 Пенетрантность Antohat
Raven_kg Wrote:
---
 Вы используете ipv6? Если нет - попробуйте отключить его в системе. 
 Выполните:
 sysctl -w net.ipv6.conf.all.disable_ipv6=1
 sysctl -w net.ipv6.conf.default.disable_ipv6=1
 sysctl -w net.ipv6.conf.lo.disable_ipv6=1
 
 и перезапустив nginx попробуйте воспроизвести ошибку. Если ошибка не 
 воспроизведется - добавьте в /etc/sysctl.conf это:
 net.ipv6.conf.all.disable_ipv6 = 1
 net.ipv6.conf.default.disable_ipv6 = 1
 net.ipv6.conf.lo.disable_ipv6 = 1
 
У нас уже была установлена опция net.ipv6.conf.all.disable_ipv6=1
Добавление net.ipv6.conf.default.disable_ipv6=1 и
net.ipv6.conf.lo.disable_ipv6=1 не помогает.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,241406,241408#msg-241408

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx использует IPv6 в proxy pass, даже если он отключен

2013-07-31 Пенетрантность Ruslan Ermilov
On Wed, Jul 31, 2013 at 06:10:55AM -0400, Antohat wrote:
 Ruslan Ermilov Wrote:
 ---
  Как-то заставить системный resolver(3) не возвращать IPv6-адреса
  (ответы
  типа ) для хоста, на котором отключен IPv6.  Попробуйте добиться
  желаемого эффекта с командой
  
  telnet download.example.com
 Не уверен, что так можно сделать...
 Может быть было бы правильнее, чтобы nginx определял, что IPv6 не настроен и
 не пытался использовать записи ?

Что ж бедному nginx, на каждый чих это проверять?  Ведь сейчас
может быть не настроен, а через минуту уже настроен.

 По крайней мере такой параметр в конфиге точно не был бы лишним.

А ещё хорошо иметь настройку в nginx.conf, которая проверяет,
что утюг дома не забыли выключить.  :)

  Или же использовать IPv4-адреса в конфигурации nginx.  Кстати, в
  приведенной конфигурации директива resolver не нужна.
 К сожалению не можем, т.к. IP апстрима могут меняться без предварительного
 уведомления.

Ну соберите nginx без --with-ipv6, и будет вам счастье.

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx использует IPv6 в proxy pass, даже если он отключен

2013-07-31 Пенетрантность damir bikmuhametov
топикстартеру:

если резолвер под вашим управлением, то, возможно, поможет следующее
обсуждение: http://comments.gmane.org/gmane.network.dns.operations/1538

-- 
boco

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Nginx использует IPv6 в proxy pass, даже если он отключен

2013-07-31 Пенетрантность ad...@sysadmins.el.kg

31.07.2013 16:10, Antohat пишет:

Ruslan Ermilov Wrote:
---

Как-то заставить системный resolver(3) не возвращать IPv6-адреса
(ответы
типа ) для хоста, на котором отключен IPv6.  Попробуйте добиться
желаемого эффекта с командой

telnet download.example.com

Не уверен, что так можно сделать...
Может быть было бы правильнее, чтобы nginx определял, что IPv6 не настроен и
не пытался использовать записи ?
По крайней мере такой параметр в конфиге точно не был бы лишним.


Или же использовать IPv4-адреса в конфигурации nginx.  Кстати, в
приведенной конфигурации директива resolver не нужна.

К сожалению не можем, т.к. IP апстрима могут меняться без предварительного
уведомления.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,241405,241407#msg-241407

___
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