Nginx 目录列表 - 按 IP 地址限制
Nginx Directory Listing - Restrict by IP Address
我们有一个要求,允许来自少数服务器的目录列表,不允许来自其他 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/ 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
指令到 return 基于 IP 范围的值。
geoAutoIndexWhitelist
默认情况下 returns a 0 除非 IP 落在子网范围内然后它 returns a 1,可以添加更多范围但是 returned值应为 0 或 1。
allowAutoIndex
根据 0 或 1 结果查看 geoAutoIndexWhitelist
和 return 关闭与开启。
请注意这是临时的且未经测试,但应该会引导您找到解决方案。
我们有一个要求,允许来自少数服务器的目录列表,不允许来自其他 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/ 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
指令到 return 基于 IP 范围的值。
geoAutoIndexWhitelist
默认情况下 returns a 0 除非 IP 落在子网范围内然后它 returns a 1,可以添加更多范围但是 returned值应为 0 或 1。
allowAutoIndex
根据 0 或 1 结果查看 geoAutoIndexWhitelist
和 return 关闭与开启。
请注意这是临时的且未经测试,但应该会引导您找到解决方案。