내 서버에는 IPv6 주소가 없습니다.
그러나 Nginx proxy_pass를 사용하여 IPv4 및 IPv6으로 업스트림 할 때 때로는 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"
proxy_pass에서 나가는 요청에 대해 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 -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
운영체제 : 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
답변
nginx> = 1.5.8 이후 해결책이있는 것 같습니다.
resolver 8.8.8.8 ipv6=off;
자세한 내용은 여기를 참조하십시오 : http://nginx.org/en/docs/http/ngx_http_core_module.html
답변
위의 솔루션 중 어느 것도 나에게 도움이되지는 않았지만, 리졸버 정의는 Nginx가 특수한 경우에 사용하는 것으로 보이며 일반적으로 시스템 리졸버를 사용하여 IP를 해결합니다.
마지막 해결책은 / etc / hosts에서 프록시 호스트에 대한 단일 IPv4를 정의하고 Nginx를 다시 시작하는 것입니다
답변
https URL을 resolver
사용할 때 나를 사용 하지 못했습니다 proxy_pass
. sysctl을 수정해야했습니다.
- 에 다음 줄을 추가하십시오
/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 - 로 시스템을 재부팅하십시오
sysctl -p
. - 로 nginx를 재부팅하십시오
sudo nginx -s reload
.