Nginx proxy_pass içinde IPv6'yı devre dışı bırak


18

Sunucumda IPv6 adresi yok.

Ancak, IPv4 ve IPv6 ile akış yukarı Nginx proxy_pass kullandığımda, bazen IPv6 kullanarak giden istekleri göndermeye çalışır:

2013/07/30 00:25:06 [error] 1930#0: *1482670 connect() to [AAAA:BBBB: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://[AAAA:BBBB:C:DDD:E:F:GGG:HHH]:443/download/file", host: "example.com"

Proxy_pass'ta giden istekler için IPv6'yı nasıl devre dışı bırakabilirim?

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_version    1.1;
  resolver              8.8.8.8;
  resolver_timeout      5s;
  proxy_pass            https://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

İşletim Sistemi: Debian Wheezy

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

ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 6c:62:6d:7a:ea:af brd ff:ff:ff:ff:ff:ff
    inet XXX.XXX.XXX.XXX/27 brd XXX.XXX.XXX.XXX scope global eth0

Bunu yaptıktan sonra mı oluyor sudo sysctl -w net.ipv6.bindv6only=0?
Flup

Flup, net.ipv6.bindv6only = 0 yardımcı olmuyor
Anton

Bu kesinlikle yanlış görünüyor. En az IPv6 bağlantı yerel adresinizin olması gerekir. Siz veya sağlayıcınız bu sunucunun yapılandırmasında hangi değişiklikleri yaptınız?
Michael Hampton

Yalnızca net.ipv6.conf.all.disable_ipv6 = 1 ekledik. Sağlayıcımız DHCP kullanarak IPv6 atamıyor, bu yüzden manuel olarak yapılandırılması gerekiyor.
Anton

Küresel sistem ayarlarını değiştirmeden özellikle nginx config ile bunu çözmek için herhangi bir yöntem var mı?
Dmitry Polushkin

Yanıtlar:



1

Kullanılması resolverkullanırken benim için işe yaramadı proxy_passbir https'nin url için. Sysctl'i değiştirmek zorunda kaldım.

  1. Aşağıdaki satırları ekleyin /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.eth0.disable_ipv6 = 1 net.ipv6.conf.eth1.disable_ipv6 = 1 net.ipv6.conf.eth2.disable_ipv6 = 1 net.ipv6.conf.eth3.disable_ipv6 = 1
  2. Sistemi yeniden başlat sysctl -p.
  3. Nginx ile yeniden başlatın sudo nginx -s reload.

Proxy flickr sorunumu çözdü.
GaryBishop

Sorunumu düzeltti, ancak istek başarılı görünüyor olsa bile şimdi hata günlüğü şikayetler gösteriyor (99: İstenen adres atanamıyor). Sadece ipv6 adresini denemesini nasıl önleyeceğimizi bulmak istiyorum.
GaryBishop

İpv6 = off komutunun nginx içindeki çözümleyiciye eklenmesi sorunu giderir ve hata mesajlarını ortadan kaldırır.
GaryBishop

0

Yukarıdaki çözümlerin hiçbiri benim için işe yaramadı, çözümleyici tanımlarının Nginx tarafından bazı özel durumlarda kullanıldığı ve genellikle IP'yi sistem çözümleyicisi kullanarak çözdüğü anlaşılıyor.

Son çözümüm / etc / hosts içindeki proxy ana makinem için tek bir IPv4 tanımlamak ve Nginx'i yeniden başlatmaktı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.