强制 nginx 反向代理仅解析域的 AAAA 记录(并忽略 A 记录)?

强制 nginx 反向代理仅解析域的 AAAA 记录(并忽略 A 记录)?

我正在尝试在我的 VPS(具有 A 和 AAAA 记录)上使用 nginxmydoamin.com和公共静态 IP 地址(IPv4 和 IPv6)来创建 IPv4 到 IPv6 代理,以使仅 IPv6 的家庭服务器可从普通 IPv4 网络访问。域的 A 记录指向 nginx 服务器,AAAA 记录直接指向仅 IPv6 的家庭服务器。

我当前的 nginx 服务器块如下所示:

server {
  listen 443 ssl http2;
  server_name mydomain.com;
  ssl_certificate /etc/letsencrypt/live/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/key.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/ca.pem;


  location / {
    proxy_pass https://[IPv6 address of the home server];
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

到目前为止,代理工作得很好,所有通过 mydomain.com 的 IPv4 流量都将由 nginx 代理,但我想知道有没有办法使用域名代替 IPv6 地址proxy_passnginx 只会解析其 AAAA 记录?提前谢谢您!

答案1

您可以使用的ipv4=off参数resolverNginx 指令

它强制 Nginx 忽略解析器的 IPv4 结果。

一个缺点是必须向该指令提供解析器 IP 地址:您不能仅禁用 IPv4 并保留已配置的解析器。

假设您想要使用8.8.8.8(Google 公共 DNS),您可以将resolver 8.8.8.8 ipv4=off;原始 FQDN 用作mydoamin.com上游 URL 的主机:

server {
  listen 443 ssl http2;
  server_name mydomain.com;
  ssl_certificate /etc/letsencrypt/live/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/key.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/ca.pem;


  location / {
    resolver 8.8.8.8 ipv4=off;
    proxy_pass https://mydoamin.com;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

答案2

Nginx 不解析,named/bind 负责解析。Nginx 负责监听并提供服务。

listen 443 ssl http2;不听AF_INET6解决家庭问题,listen [::]:443 ssl http2;是的。

相关内容