![将外部 WAN 地址映射到 Nginx 变量](https://linux22.com/image/773627/%E5%B0%86%E5%A4%96%E9%83%A8%20WAN%20%E5%9C%B0%E5%9D%80%E6%98%A0%E5%B0%84%E5%88%B0%20Nginx%20%E5%8F%98%E9%87%8F.png)
我在 LAN 中有一个 Nginx Web 服务器,该服务器通过 NAT 从 Internet 寻址。变量$server_addr
包含服务器的内部 LAN 地址。有没有办法将 Web 服务器的外部(暴露在 Internet 上的)IP 地址映射到 Nginx 变量?
答案1
nginx 默认绑定到所有接口,它不关心接口 IP 地址。因此,它可以服务于任何 IP 地址,无论请求来自 WAN 还是 LAN。
您需要为您的域设置动态 DNS。您的服务器将包含一个守护程序,用于将新的外部 IP 更新到动态 DNS 提供商。然后所有客户端都将使用动态 DNS 名称连接到服务器。
另一种选择是在 LAN 中设置一个 DNS 服务器,它将服务器的域名解析为 LAN IP 地址,然后让 LAN 客户端使用该 DNS 服务器。
答案2
我已经使用 cronjob 更新外部 IP 地址的映射文件解决了该问题:
#!/usr/bin/env bash
# enumerate authorized networks
cat > /etc/nginx/current_ip.conf <<EOF
geo \$mysite_geo {
default "no";
127.0.0.1 "yes"; # network which should have access
10.10.0.0/16 "yes"; # network which should have access
EOF
((echo " " && (dig +short example.com | grep '^[.0-9]*$')) \
&& echo "\"yes\"; } # current dynamic ip") |xargs -d'\n' \
>> /etc/nginx/current_ip.conf