Nginx代理传递-禁用IPv6

6

我有以下nginx配置:

server {
listen       127.0.0.1:8080;
server_name  127.0.0.1;

client_max_body_size 20m;

include /etc/nginx/conf.d/services/*.conf;

# redirect server error pages to the static page /50x.html                                                                                                                                              
#                                                                                                                                                                                                       
error_page   500 /500.json;
error_page   501 /501.json;
error_page   502 /502.json;
error_page   503 /503.json;
error_page   504 /504.json;
error_page   404 /404.json;

location = /500.json {
    root   /opt/lj/nginx;
}
location = /501.json {
    root   /opt/lj/nginx;
}
location = /502.json {
    root   /opt/lj/nginx;
}
location = /503.json {
    root   /opt/lj/nginx;
}
location = /504.json {
    root   /opt/lj/nginx;
}
location = /404.json {
    root  /opt/lj/nginx;
}
}

在 conf.d/services 目录中,我有一个带有以下内容的文件:
location /api/auth {proxy_pass     http://127.0.0.1:8081;}

我有一个监听8081端口请求的上游处理过程。几乎两三次中,请求会被正确重定向,但每三次中就会出现以下错误:

2014/10/09 03:03:52 [alert] 4572#0: *16 socket() failed (97: Address family not supported by protocol) while connecting to upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET /api/auth/1.0/companies/1/clients HTTP/1.1", upstream: "http://[::1]:8081/api/auth/1.0/companies/1/clients", host: "localhost:8080"

我不知道如何让nginx仅将请求转发到upstream理解的IPv4地址。
访问日志:(请注意,3次尝试中有1次会返回500错误,其余均成功通过)
127.0.0.1 - portalAdmin [09/Oct/2014:02:56:37 -0400] "GET /api/auth/1.0/companies/1/clients HTTP/1.1" 500 107 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "98.207.234.244"
127.0.0.1 - portalAdmin [09/Oct/2014:02:57:38 -0400] "GET /api/auth/1.0/companies/1/clients HTTP/1.1" 200 2 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "98.207.234.244"
127.0.0.1 - portalAdmin [09/Oct/2014:02:57:39 -0400] "GET /api/auth/1.0/companies/1/clients HTTP/1.1" 200 2 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "98.207.234.244"
127.0.0.1 - portalAdmin [09/Oct/2014:02:57:41 -0400] "GET /api/auth/1.0/companies/1/clients HTTP/1.1" 500 107 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "98.207.234.244"
127.0.0.1 - portalAdmin [09/Oct/2014:03:03:44 -0400] "GET /api/auth/1.0/companies/1/clients HTTP/1.1" 200 2 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "98.207.234.244"
127.0.0.1 - portalAdmin [09/Oct/2014:03:03:45 -0400] "GET /api/auth/1.0/companies/1/clients HTTP/1.1" 200 2 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "98.207.234.244"
127.0.0.1 - portalAdmin [09/Oct/2014:03:03:46 -0400] "GET /api/auth/1.0/companies/1/clients HTTP/1.1" 500 107 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "98.207.234.244"
127.0.0.1 - portalAdmin [09/Oct/2014:03:03:50 -0400] "GET /api/auth/1.0/companies/1/clients HTTP/1.1" 200 2 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "98.207.234.244"
127.0.0.1 - portalAdmin [09/Oct/2014:03:03:51 -0400] "GET /api/auth/1.0/companies/1/clients HTTP/1.1" 200 2 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "98.207.234.244"
127.0.0.1 - portalAdmin [09/Oct/2014:03:03:52 -0400] "GET /api/auth/1.0/companies/1/clients HTTP/1.1" 500 107 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36" "98.207.234.244"

非常感谢你的帮助!谢谢。


抱歉,我在哪里可以找到ports.conf文件? - Vijay Shankar Kalyanaraman
这不可能是整个配置。还要查看包含的文件。 - Michael Hampton
2个回答

12

也许您的配置中某个地方使用了“localhost”而不是“127.0.0.1”。您可以指定一个解析器并将ipv6关闭。

resolver 8.8.8.8 4.2.2.2 ipv6=off;

如果您的端口8081上的Web服务也在Nginx上,那么启用IPv6可能会解决问题。

server {
    listen 8081;
    listen [::]:8081;
    ....
}

1
我经历了相同的问题。将 Ipv6only=on; 改为 Ipv6only=off; 对我没有效果。当我完全删除 "Ipv6only=off/on" 后,它就像魔法一样开始工作了!请尝试完全删除它并重新加载nginx服务。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接