Phe*_*yne 3 nginx nginx-location
我正在尝试设置 Nginx 来为用户显示公共文件夹中的文件。该站点将有多个用户,每个用户都有一个 Nginx 不知道其名称的子目录。
目录结构示例:
/users/usernameHere/public
/users/usernameHere/private
Run Code Online (Sandbox Code Playgroud)
我只希望 nginx 显示用户公共目录中的文件并拒绝对任何其他目录的所有访问。
这是我到目前为止所尝试的:
location ^~ /users/*/public/ {
allow all;
try_files $uri $uri/ =404;
}
location ^~ /users/ {
deny all;
}
Run Code Online (Sandbox Code Playgroud)
试试这个配置
\n\nlocation ~ /users/.*/public/ {\n allow all;\n try_files $uri $uri/ =404;\n}\n\nlocation /users/ {\n deny all;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n阅读官方文档以了解 uri 之前的修饰符之间的区别,您的第一个位置是正则表达式位置,应该使用~or*~来区分大小写和不区分大小写的匹配。
\n\n\n位置可以由前缀字符串或正则表达式定义。正则表达式使用前面的 \xe2\x80\x9c~*\xe2\x80\x9d 修饰符(对于不区分大小写的匹配)或 \xe2\x80\x9c~\xe2\x80\x9d 修饰符(对于大小写-敏感匹配)。
\n
那么你的第二个位置是由前缀字符串定义的公共位置/users/,你使用的修饰符^~意味着跳过正则表达式检查并使用当前最长的匹配前缀,这是一个/users/,所以根据你的配置,你将始终得到 403 返回。
\n\n如果最长匹配前缀位置具有 \xe2\x80\x9c^~\xe2\x80\x9d 修饰符,则不会检查正则表达式。
\n