我们要求允许来自少数服务器的目录列表,并禁止其他IP地址,并且所有IP地址都应该能够下载目录中的所有文件。
有人可以提供正确的nginx配置。
location / {
root /downloads;
autoindex on;
allow 1.1.1.1;
deny all;
}
如果我使用上面的配置,只有1.1.1.1 IP地址可以从该服务器列出目录,并且可以从其他IP地址下载,因为IP地址限制而禁止下载显示
有没有办法克服这个问题,谢谢。
答案 0 :(得分:1)
由于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
指令依次使用geoAutoIndexWhitelist
{{ 1}}指令返回基于IP范围的值。
allowAutoIndex
返回0,除非IP在子网范围内,然后返回1,可以添加更多范围,但返回的值应为0或1。
geoAutoIndexWhitelist
查看def syllables(word):
vowels = ['a','e','i','o','u','y']
# Delete ending vowel of the word since they don't count in number of syllables
# I've no idea how to remove all ending vowels though
word = word[:-1]
# List with vowels that appear in the word
vowelsList = [x for x in vocals if x in word]
N = []
for i in word:
if i in vowels:
N += i
N = len(N)
return N
print(syllables("bureau"))
# Should print "1" but prints "3" instead
并根据0或1结果返回off与on。
请注意这个临时和未经测试但应该引导您找到解决方案。
击>