Vô hiệu hóa IPv6 trong nginx proxy_pass


18

Máy chủ của tôi không có địa chỉ IPv6.

Tuy nhiên, khi tôi sử dụng Nginx proxy_pass để ngược dòng với IPv4 và IPv6, đôi khi nó cố gửi các yêu cầu gửi đi bằng 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"

Làm cách nào tôi có thể tắt IPv6 cho các yêu cầu gửi đi trong 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_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

HĐH: 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

Điều này xảy ra sau khi bạn làm sudo sysctl -w net.ipv6.bindv6only=0?
Flup

Flup, net.ipv6.bindv6only = 0 không giúp đỡ
Anton

Điều đó chắc chắn có vẻ sai. Bạn nên có ít nhất địa chỉ liên kết cục bộ IPv6. Những thay đổi nào bạn hoặc nhà cung cấp của bạn đã thực hiện đối với cấu hình của máy chủ này?
Michael Hampton

Chúng tôi chỉ thêm net.ipv6.conf.all.disable_ipv6 = 1. Nhà cung cấp của chúng tôi không gán IPv6 bằng DHCP, do đó, nó phải được cấu hình thủ công.
Anton

Có cách nào để giải quyết cụ thể với cấu hình nginx, mà không thay đổi cài đặt hệ thống toàn cầu không?
Dmitry Polushkin

Câu trả lời:



0

Cả hai giải pháp trên đều không phù hợp với tôi, có vẻ như các định nghĩa trình phân giải được Nginx sử dụng trong một số trường hợp đặc biệt và nó thường phân giải IP bằng trình phân giải hệ thống.

Giải pháp cuối cùng của tôi là xác định một IPv4 duy nhất cho máy chủ proxy của tôi trong / etc / hosts và khởi động lại Nginx


0

Sử dụng resolverkhông hoạt động đối với tôi khi sử dụng proxy_passurl https. Tôi đã phải sửa đổi hệ thống.

  1. Thêm các dòng sau vào /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. Hệ thống khởi động lại với sysctl -p.
  3. Khởi động lại nginx với sudo nginx -s reload.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.