我正在嘗試在我的 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_pass
nginx 只會解析其 AAAA 記錄?提前謝謝了!
答案1
您可以使用的ipv4=off
參數resolver
Nginx 指令。
它強制 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;
確實如此。