环境:
- webdav 服务器在 localhost:10001 上运行
- nginx 服务器在 80 端口上运行
目标:
- nginx 需要有一个外部 /webdav 位置
- GET 请求需要由 nginx autoindex 提供
- 所有其他请求方法都需要代理到 localhost:10001 的 webdav 服务器
- GET 和 PROPFIND 请求方法无需认证(基本认证),而其他所有请求方法都需要认证
这是我尝试过的一个例子,我认为它传达了我的意图但却无效(这里不允许使用 map 指令)。
map webdav_location $request_method {
GET @webdav-get;
PROPFIND @webdav-list;
default @webdav-auth;
}
location @webdav-get {
autoindex on;
alias /mnt/storage/;
}
location @webdav-list {
proxy_pass http://localhost:10001;
}
location @webdav-auth {
include conf.d/auth.conf;
proxy_pass http://localhost:10001;
}
location /webdav {
$webdav_location;
}
我也尝试过使用 if 语句,但我读到应该避免在 nginx conf 中使用 if 语句。因此我尝试使用 map,因为我认为我的目的是基于 request_method 进行映射,但也许其他方法更适合实现我的目标?
感谢您的阅读