更新
由于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
和map
指令的组合来做到这一点
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。
allowAutoIndex
geoAutoIndexWhitelist
根据 0 或 1 结果查看并返回关闭与打开。
请注意此临时且未经测试的内容,但应该会引导您找到解决方案。