我正在尝试在我的 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_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;
原始 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;
是的。