除非提供身份验证,否则 NGINX 使目录只读
NGINX make directory readonly unless authentication provided
我有一个目录public
,我将在其中上传各种文件。我希望这些文件无需任何身份验证即可下载。
但是,如果提供身份验证,我还希望能够使用 WebDAV 编辑和添加新文件。有什么办法可以在同一个目录(位置)上同时执行这两种行为?
我尝试了以下技巧:
location /public/ {
if ($remote_user != "") {
return 302 e;
}
auth_basic off;
fancyindex off;
dav_methods off;
}
location /public/e {
}
但是,我找不到一种方法来代替 /public/e
索引 /public/
。
我还尝试了以下方法:
location /public/ {
if ($remote_user = "") {
auth_basic off;
fancyindex off;
dav_methods off;
}
}
但是 Nginx 抱怨说我不能在 if 语句中包含这些指令。
我也试过:
location /public/ {
set $authenticated off;
if ($remote_user != "") {
set $authenticated on;
}
auth_basic $authenticated;
fancyindex $authenticated;
dav_methods $authenticated;
}
但是Nginx说一个变量是无效的,on
或off
是预期的。
我还考虑过制作两个目录,public
和 public-webdav
,它们被符号链接到同一个目录,并为它们分配不同的 nginx 位置,但我希望有一个更简洁的解决方案。
谢谢!
我用这个方法解决了:
location @public {
auth_basic off;
}
location /public/ {
if ($remote_user = "") {
error_page 418 = @public;
return 418;
}
}
也就是说,为错误 418(茶壶)创建自定义处理程序并强制执行该错误。
我有一个目录public
,我将在其中上传各种文件。我希望这些文件无需任何身份验证即可下载。
但是,如果提供身份验证,我还希望能够使用 WebDAV 编辑和添加新文件。有什么办法可以在同一个目录(位置)上同时执行这两种行为?
我尝试了以下技巧:
location /public/ {
if ($remote_user != "") {
return 302 e;
}
auth_basic off;
fancyindex off;
dav_methods off;
}
location /public/e {
}
但是,我找不到一种方法来代替 /public/e
索引 /public/
。
我还尝试了以下方法:
location /public/ {
if ($remote_user = "") {
auth_basic off;
fancyindex off;
dav_methods off;
}
}
但是 Nginx 抱怨说我不能在 if 语句中包含这些指令。
我也试过:
location /public/ {
set $authenticated off;
if ($remote_user != "") {
set $authenticated on;
}
auth_basic $authenticated;
fancyindex $authenticated;
dav_methods $authenticated;
}
但是Nginx说一个变量是无效的,on
或off
是预期的。
我还考虑过制作两个目录,public
和 public-webdav
,它们被符号链接到同一个目录,并为它们分配不同的 nginx 位置,但我希望有一个更简洁的解决方案。
谢谢!
我用这个方法解决了:
location @public {
auth_basic off;
}
location /public/ {
if ($remote_user = "") {
error_page 418 = @public;
return 418;
}
}
也就是说,为错误 418(茶壶)创建自定义处理程序并强制执行该错误。