我正在配置 nginx 以使其正常工作secure_download
,并且没有任何问题。
但是我想修改它并使下载链接仅为特定 IP 提供。
我可以使用$remote_addr
变量来实现这一点。但是我知道有些 ISP 更改 IP 太频繁了(每 2 或 3 秒一次)。
我的 ISP 也是这样,例如:
我112.112.11.11
现在得到的是我的 IP,刷新后它将是112.112.11.17
。此行为由 ISP 设置,而不是由我的调制解调器或路由器设置,我知道还有其他几个 ISP 也这样做。
现在,由于 IP 变化太快,安全下载将不起作用,因为在加载页面时,IP 可能已经改变,导致新 IP 的下载链接无效。
我想告诉 nginx 只查看 IP 地址上的前 3 个块,在这种情况下,112.112.11.x
可以使用相同的安全下载链接下载相同的文件。使用 可以实现吗nginx conf
?
欢迎任何其他替代方案。
答案1
您可以使用地图指令仅包含 $remote_addr 的前三个八位字节:
map $remote_addr $remote_net {
default $remote_addr;
~^(?<octets>\d+\.\d+\.\d+) $octets;
}
然后只需使用 $remote_net 而不是 $remote_addr。默认情况下,对于 ipv6 客户端,将保留该变量,对于 ipv4 客户端,仅保留前三个八位字节。
答案2
您可以在操作系统级别停止访问。使用 iptables 允许来自该范围的主机的端口 80 和 443 上的入站流量,然后拒绝端口 80 和 443 上的所有其他流量。