nginx:阻止目录但允许访问子目录

时间:2016-04-15 18:03:13

标签: nginx proxy webserver

我试图找出如何使用nginx阻止特定目录,同时允许访问该目录中的资源(包括任何子目录)。例如,

但是,应该阻止

/static 应该可以访问/static/whatever.css

我尝试过类似的东西,但它没有工作:

    location ^~ /static/ {
        deny all;
        return 404;
    }

    location ^~ /static/* {
        allow all;
    }

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

这是不正确的语法。你可能想写:

location = /static/ {
    deny all;
}

location /static/ {
}

return 404是多余的,因为deny all将返回403. allow all是多余的,因为它是默认操作。我删除了^~修饰符,应添加该修饰符以防止location被任何潜在的正则表达式位置覆盖。有关位置语法,请参阅this document

但是,似乎唯一要拒绝的URI是目录本身,可能是为了禁用继承的index指令。这可能也有效(有或没有^~修饰符 - 见上文):

location /static/ {
    try_files $uri =404;
}

通过从$uri/指令中省略/元素(注释尾随try_files),将忽略index指令。有关详情,请参阅this document