1

我们要求允许来自少数服务器的目录列表并禁止来自其他 IP 地址,并且所有 IP 地址应该能够下载目录内的所有文件。

有人可以提供正确的 nginx 配置吗?

location / {
root /downloads;
autoindex on;
allow 1.1.1.1;
deny all;
}

如果我使用上面的配置,只有在 1.1.1.1 的 IP 地址上才能从此服务器列出目录并可以下载文件,但由于 IP 地址限制,从其他 IP 地址下载显示被禁止

有没有办法解决这个问题,谢谢。

4

1 回答 1

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;
    }
}

您可以使用geomap指令的组合来做到这一点

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 结果查看并返回关闭与打开。

请注意此临时且未经测试的内容,但应该会引导您找到解决方案。

于 2018-05-17T15:28:11.580 回答