Nginx目录列表 - 按IP地址限制

时间:2018-05-17 12:56:28

标签: nginx nginx-location nginx-config

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

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

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

如果我使用上面的配置,只有1.1.1.1 IP地址可以从该服务器列出目录,并且可以从其他IP地址下载,因为IP地址限制而禁止下载显示

有没有办法克服这个问题,谢谢。

1 个答案:

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

您可以使用geomap指令的组合

来执行此操作
geo $geoAutoIndexWhitelist {
    default        0;
    1.1.1.1/24     1;
}

map $geoAutoIndexWhitelist $allowAutoIndex {
    1              off;
    0              on;
}

location / {
    root /downloads;
    autoindex $allowAutoIndex;
}

所以我们正在告诉autoindexallowAutoIndex 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。

请注意这个临时和未经测试但应该引导您找到解决方案。