2016-07-11 33 views
0

我试图设置Nginx来显示用户的公用文件夹中的文件。该网站将有多个用户,每个用户都有一个子目录,其名称对Nginx来说是未知的。当子目录名称未知时,Nginx会阻止访问子目录

目录结构示例:

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

我只想nginx的显示来自用户的公共目录中的文件,并拒绝所有访问任何其他目录。

这是我试过到目前为止:

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

location ^~ /users/ { 
    deny all; 
} 
+0

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

回答

1

试试这个配置

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

location /users/ { 
    deny all; 
} 

阅读official docs看到URI之前的修饰符之间的区别,你第一个位置是一个正则表达式的位置并应对区分大小写和不区分大小写的匹配使用~*~

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

然后你的第二个位置是由前缀字符串/users/定义一个共同的位置,^~您使用手段修改跳过正则表达式检查,并使用当前的最长前缀匹配,这里是/users/一个,所以用你的配置你将永远得到403回报。

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

+0

谢谢,这很完美。 – PhearOfRayne