nginx リバース プロキシにドメインの AAAA レコードのみを解決 (A レコードは無視) するように強制しますか?

nginx リバース プロキシにドメインの AAAA レコードのみを解決 (A レコードは無視) するように強制しますか?

私は、mydoamin.comパブリック静的 IP アドレス (IPv4 と IPv6 の両方) を持つ VPS (A および AAAA レコード付き) で nginx を使用して、IPv4 から IPv6 へのプロキシを作成し、通常の IPv4 ネットワークから IPv6 のみのホーム サーバーにアクセスできるようにしようとしています。ドメインの 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_pass、nginx は AAAA レコードのみを解決しますか? よろしくお願いします!

答え1

ipv4=offパラメータを利用することができますresolverNginx ディレクティブ

これにより、Nginx はリゾルバからの IPv4 結果を無視するようになります。

1 つの欠点は、このディレクティブにリゾルバ IP アドレスを指定する必要があることです。つまり、IPv4 を無効にして、既に構成されているリゾルバを保持することはできません。

たとえば、(Google Public DNS) を使用する場合、アップストリーム URL のホストとして元の FQDN を8.8.8.8使用できます。resolver 8.8.8.8 ipv4=off;mydoamin.com

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;そうします。

関連情報