上游解析为 IPv6 时 Nginx 连接失败

wan*_*oel 5 nginx nginx-reverse-proxy

我在 nginx 中配置了对 google-analytics.com 执行 proxy_pass 的配置。但是正如您所知,google-analytics 解析为 ipv4,有时解析为 ipv6,当它确实解析为 ipv6 时,nginx 因此错误而失败。

connect() to [2a00:xxx:xxx:809::xxx]:443 连接到上游时失败(101:网络无法访问)。(我只是混淆了上游的真实ip)

连接上游时上游服务器暂时禁用

为什么proxy_pass 中上游的nginx 失败解析为ipv6?

server {
     server_name upstream.nmmapper.com;
     location /.well-known/acme-challenge/ {
        allow all;
        root /var/www/letsencrypt;
        try_files $uri =404;
        break;
     }
}
location = /analytics.js {
        proxy_set_header Accept-Encoding "";
        proxy_pass https://www.google-analytics.com/analytics.js;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $server_name;
    }
Run Code Online (Sandbox Code Playgroud)

kmg*_*mgt 2

尝试添加 ipv6listen [::]:80指令:

server {
  listen 80;
  listen [::]:80; 
  server_name upstream.nmmapper.com;
  ...
}
Run Code Online (Sandbox Code Playgroud)

对于 SSL:

listen 443 ssl;
listen [::]:443 ssl;
Run Code Online (Sandbox Code Playgroud)

  • @kmgt 你能解释为什么这应该有效吗?我问这个问题是因为这是告诉服务器在端口 80 的 ipv6 本地主机上*监听*,但提问者的问题与代理传递到恰好解析为 ipv6 地址的上游服务器有关。 (2认同)