我正在使用Nginx运行一个使用率相当高的CDN系统,我需要保护我的链接,以免用户之间共享它们。
当前配置完美运行。.
# Setup Secure Links
secure_link $arg_md5,$arg_expires;
secure_link_md5 "$secure_link_expires$uri$remote_addr secret";
if ($secure_link = "") { return 403; }
if ($secure_link = "0") { return 410; }
但是,随着互联网的移动性越来越强,现在有许多用户来自大学校园等,我看到大量失败的请求,并且由于请求者的IP在两次请求之间发生了变化,最终用户感到恼火。
发出请求的IP几乎总是在同一范围内,例如:
Original Request: 192.168.0.25
File Request: 192.168.0.67
我很乐意将这些安全链接锁定在一定范围内,例如
192.168.0.0 - 192.168.0.255
或者走得更远,使其更大
192.168.0.0 - 192.168.255.255
但是我无法在nginx中找到一种方法来实现此目的,或者secure_link功能甚至支持此方法。
如果这不可能-有人对如何保护链接(虽然限制较少但仍然相当安全)有其他想法吗?我曾经看过使用浏览器字符串,但是我们许多用户都有下载管理器或使用3rd part桌面客户端-因此这是不可行的。
我非常想做到这一点,而不必使用任何动态代码来检查远程数据库,因为这是非常大的工作量,而我宁愿没有这种依赖性。
答案 0 :(得分:0)
您可以在Nginx中使用多个身份验证指令,因此可以从安全链接中删除IP并将其指定为单独的指令。
Nginx使用CIDR范围,因此在您的示例中,只是
allow 192.168.0.0/16;
deny all;
答案 1 :(得分:0)
您可以使用地图方法
series = np.unique(series)
count = 0
pcorrect = np.zeros(len(nseries))
for s in nseries:
if data.loc[data['series'] == s]:
outcome_count = data['outcome'].value_counts()
nstarted_trials = outcome_count['T'] + outcome_count[F']
pcorrect[count]= outcome_count['T'] / nstarted_trials
count +=1
然后再使用一些东西
map $remote_addr $auth_addr {
default $remote_addr;
~*^192\.168\.100 192.168.100;
~*^192\.169 192.169;
}
我没有使用这种方法,但是我认为它应该起作用。如果没有,请告诉我
答案 2 :(得分:0)
由于@Tarun Lalwani指出了地图的想法,我设法使这项工作得以实现。
# This map breaks down $remote_addr into octets
map $remote_addr $ipv4_first_two_octets {
"~(?<octet1>\d+)\.(?<octet2>\d+)\.(?<octet3>\d+)\.(?<octet4>\d+)" "${octet1}.${octet2}";
default "0.0";
}
location / {
# Setup Secure Links secure_link $arg_md5,$arg_expires;
secure_link_md5 "$secure_link_expires$uri$ipv4_first_two_octets secret";
}