【问题标题】:Nginx block access to sub directory when sub directory name is unknown当子目录名称未知时,Nginx 阻止访问子目录
【发布时间】:2016-07-12 14:10:11
【问题描述】:

我正在尝试设置 Nginx 以在公共文件夹中为用户显示文件。该站点将有多个用户,每个用户都有一个 Nginx 未知名称的子目录。

示例目录结构:

/users/usernameHere/public
/users/usernameHere/private

我只希望 nginx 显示用户公共目录中的文件并拒绝对任何其他目录的所有访问。

这是我迄今为止尝试过的:

location ^~ /users/*/public/ {
    allow all;
    try_files $uri $uri/ =404;
}

location ^~ /users/ {
    deny all;
}

【问题讨论】:

  • 您的第一个位置正则表达式可能有问题,应该是/users/.*/public/

标签: nginx nginx-location


【解决方案1】:

试试这个配置

location ~ /users/.*/public/ {
    allow all;
    try_files $uri $uri/ =404;
}

location /users/ {
    deny all;
}

阅读official docs 以查看uri 之前的修饰符之间的区别,您的第一个位置是正则表达式位置,应使用~*~ 进行区分大小写和不区分大小写的匹配。

位置可以由前缀字符串或正则表达式定义。正则表达式使用前面的“~*”修饰符(用于不区分大小写的匹配)或“~”修饰符(用于区分大小写的匹配)指定。

那么你的第二个位置是一个由前缀字符串/users/定义的普通位置,你使用的修饰符^~意味着跳过正则表达式检查并使用当前最长匹配前缀,这里是/users/一个,所以使用您的配置,您将始终获得 403 返回。

如果最长匹配前缀位置有“^~”修饰符,则不检查正则表达式。

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多