我们要求允许来自少数服务器的目录列表并禁止来自其他 IP 地址,并且所有 IP 地址应该能够下载目录内的所有文件。
有人可以提供正确的 nginx 配置吗?
location / {
root /downloads;
autoindex on;
allow 1.1.1.1;
deny all;
}
如果我使用上面的配置,只有在 1.1.1.1 的 IP 地址上才能从此服务器列出目录并可以下载文件,但由于 IP 地址限制,从其他 IP 地址下载显示被禁止
有没有办法解决这个问题,谢谢。
我们要求允许来自少数服务器的目录列表并禁止来自其他 IP 地址,并且所有 IP 地址应该能够下载目录内的所有文件。
有人可以提供正确的 nginx 配置吗?
location / {
root /downloads;
autoindex on;
allow 1.1.1.1;
deny all;
}
如果我使用上面的配置,只有在 1.1.1.1 的 IP 地址上才能从此服务器列出目录并可以下载文件,但由于 IP 地址限制,从其他 IP 地址下载显示被禁止
有没有办法解决这个问题,谢谢。
由于autoindex不喜欢使用变量或处于 if 块中,这是我对您的问题的有效解决方案
geo $geoAutoIndexWhitelist {
default 0;
1.1.1.0/24 1;
}
server {
...
root /downloads;
autoindex off;
location / {
if ($geoAutoIndexWhitelist) {
rewrite ^/(.*)$ /all_downloads/$1 last;
}
try_files $uri $uri.html $uri/ =404;
}
location /all_downloads/ {
internal;
alias /downloads;
autoindex on;
}
}
geo $geoAutoIndexWhitelist {
default 0;
1.1.1.1/24 1;
}
map $geoAutoIndexWhitelist $allowAutoIndex {
1 off;
0 on;
}
location / {
root /downloads;
autoindex $allowAutoIndex;
}
所以发生的事情是我们告诉autoindex从指令中获取值allowAutoIndex map,反过来,使用geoAutoIndexWhitelist geo指令返回基于 IP 范围的值。
geoAutoIndexWhitelist默认情况下返回 0,除非 IP 在子网范围内,否则返回 1,可以添加更多范围,但返回值应为 0 或 1。
allowAutoIndexgeoAutoIndexWhitelist根据 0 或 1 结果查看并返回关闭与打开。
请注意此临时且未经测试的内容,但应该会引导您找到解决方案。