Nginx प्रॉक्सी_पास में IPv6 को अक्षम करें


18

मेरे सर्वर में IPv6 एड्रेस नहीं है।

हालाँकि, जब मैं IPv4 और IPv6 के साथ अपस्ट्रीम करने के लिए Nginx प्रॉक्सी_पास का उपयोग करता हूं, तो कभी-कभी यह IPv6 का उपयोग करके आउटगोइंग अनुरोध भेजने की कोशिश करता है:

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"

मैं प्रॉक्सी_पास में आउटगोइंग अनुरोधों के लिए IPv6 को कैसे निष्क्रिय कर सकता हूं?

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 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

ओएस: डेबियन व्हीज़ी

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

आईपी ​​ए

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

क्या आपके ऐसा करने के बाद ऐसा होता है sudo sysctl -w net.ipv6.bindv6only=0?
फ्लॉप

Flup, net.ipv6.bindv6only = 0 मदद नहीं करता है
Anton

जो निश्चित रूप से गलत लगता है। आपके पास कम से कम IPv6 लिंक-स्थानीय पते होने चाहिए। इस सर्वर के कॉन्फ़िगरेशन में आपके या आपके प्रदाता ने क्या परिवर्तन किए हैं?
माइकल हैम्पटन

हमने केवल net.ipv6.conf.all.disable_ipv6 = 1 जोड़ा है। हमारा प्रदाता DHCP का उपयोग करते हुए IPv6 प्रदान नहीं करता है, इसलिए इसे मैन्युअल रूप से कॉन्फ़िगर किया जाना चाहिए।
एंटोन

वहाँ वैसे भी हल करने के लिए कर रहे हैं कि विशेष रूप से nginx विन्यास के साथ, वैश्विक प्रणाली सेटिंग्स को बदलने के बिना?
दिमित्री पॉलुस्किन

जवाबों:



1

का उपयोग resolverका उपयोग करते समय मेरे लिए काम नहीं किया proxy_passएक HTTPS URL के लिए। मुझे sysctl को संशोधित करना पड़ा।

  1. में निम्नलिखित पंक्तियाँ जोड़ें /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. रीबूट सिस्टम के साथ sysctl -p
  3. के साथ रिबूट nginx sudo nginx -s reload

मेरी समस्या को हल करने वाली फ़्लिकर को हल किया।
गैरीबिशप

इसने मेरी समस्या को ठीक कर दिया लेकिन अब त्रुटि लॉग शिकायतें दिखा रहा है (99: अनुरोधित पते को असाइन नहीं कर सकता) भले ही अनुरोध स्पष्ट रूप से सफल हो। मैं सिर्फ यह पता लगाना चाहूंगा कि इसे IPv6 एड्रेस की कोशिश करने से कैसे रोका जाए।
गैरीबिशप

IPv6 = को बंद करने के लिए nginx में रिज़ॉल्वर के साथ इसे ठीक करता है और त्रुटि संदेशों को समाप्त करता है।
गैरीबिशप

0

ऊपर दिए गए समाधानों में से किसी ने भी मेरे लिए काम नहीं किया, ऐसा लगता है कि रिज़ॉल्वर की परिभाषाएँ नगनेक्स द्वारा कुछ विशेष मामले में उपयोग की जाती हैं, और यह आमतौर पर सिस्टम रिज़ॉल्वर का उपयोग करके आईपी को हल करता है।

मेरा अंतिम समाधान मेरे आदि / मेजबान / होस्ट में प्रॉक्सी होस्ट के लिए एक एकल IPv4 को परिभाषित करना और Nginx को पुनरारंभ करना था

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.