強制 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;
  }
}

到目前為止,代理工作得很好,所有來自 IPv4 的 mydomain.com 流量都將由 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;原始 FQDNmydoamin.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;確實如此。

相關內容