位置指令被忽略了?

时间:2014-03-03 05:23:14

标签: nginx

我需要拒绝使用Nginx

访问特定文件夹中的大多数文件

这是我试过的配置。

location ~ /rapidleech/(classes|configs|files|hosts|languages|rar|templates) {
      deny  all;
    }

location /rapidleech/files/files.lst {
    allow all;
    }

信息:rapidleech文件夹包含类(文件夹),配置(文件夹)....

Nginx似乎忽略allow all;因为我在尝试访问时被禁止403

/rapidleech/files/files.lst

感谢任何帮助..

1 个答案:

答案 0 :(得分:1)

这是因为正则表达式位置优先于正常位置。请阅读documentation,了解nginx如何选择最佳匹配位置。

在您的情况下,您可以使用^~修饰符

来阻止检查正则表达式位置
location ~ /rapidleech/(classes|configs|files|hosts|languages|rar|templates) {
    deny  all;
}

location ^~ /rapidleech/files/files.lst {
    allow all;
}

此外,您应该意识到,regexp位置与请求的任何部分匹配,而不仅仅是开头,因此您的配置也会阻止访问/some/path/rapidleech/classes

如果可以禁止所有/rapidleech/树,那么它会更简单,更有效。

location /rapidleech/ {
    deny  all;
}

location /rapidleech/files/files.lst {
    allow all;
}