I'm trying to setup Nginx to show files in a public folder for a user. The site will have multiple users and each user has a sub directory which the name is unknown to Nginx.
Example Directory Structure:
/users/usernameHere/public
/users/usernameHere/private
I only want nginx to show files from the users public directory and deny all access to any other directories.
This is what I tried so far:
location ^~ /users/*/public/ {
allow all;
try_files $uri $uri/ =404;
}
location ^~ /users/ {
deny all;
}
答案 0 :(得分:2)
试试这个配置
location ~ /users/.*/public/ {
allow all;
try_files $uri $uri/ =404;
}
location /users/ {
deny all;
}
阅读official docs以查看uri之前的修饰符之间的差异,您的第一个位置是正则表达式位置,并且应使用~
或*~
区分大小写且不区分大小写匹配。
位置可以由前缀字符串或正则表达式定义。正则表达式使用前面的“〜*”修饰符(用于不区分大小写的匹配)或“〜”修饰符(用于区分大小写的匹配)指定。
然后你的第二个位置是由前缀字符串/users/
定义的公共位置,你使用的修饰符^~
意味着跳过正则表达式检查并使用当前最长的匹配前缀,这里是{{ 1}}一个,所以使用你的配置你将总是得到403返回。
如果最长匹配前缀位置具有“^〜”修饰符,则不检查正则表达式。