需要选上 HTTP_DAV, 第三方的 HEADERS_MORE 和 HTTP_DAV_EXT 模块
请自行修改以下
load_module /usr/local/libexec/nginx/ngx_http_dav_ext_module.so; load_module /usr/local/libexec/nginx/ngx_http_headers_more_filter_module.so;
dav_ext_lock_zone zone=dav:10m;
server {
server_name ~^(.*)\.webdav\.example\.com$;
listen 443 ssl http2;
listen [::]:443 ssl http2;
access_log /logs/webdav.example.com.log;
set $webdav_path /webdav;
set $webdav_root $webdav_path/root/$1;
set $webdav_auth $webdav_path/auth/$1;
root $webdav_root;
if ( !-d $webdav_root ) {
return 404;
}
if ( !-f $webdav_auth ) {
return 404;
}
ssl_certificate /ssl/fullchain.pem;
ssl_certificate_key /ssl/privkey.pem;
ssl_stapling on;
ssl_stapling_verify on;
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
charset utf-8;
client_body_temp_path /webdav/temp;
client_max_body_size 0;
create_full_put_path on;
gzip off;
send_timeout 3600;
client_body_timeout 3600;
lingering_timeout 3600;
dav_ext_lock zone=dav;
auth_basic on;
auth_basic_user_file $webdav_auth;
location / {
dav_access user:rw group:rw all:r;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;
set $dest $http_destination;
if (-d $request_filename) {
rewrite ^(.*[^/])$ $1/;
set $dest $dest/;
}
if ($request_method ~ (MOVE|COPY)) {
more_set_input_headers 'Destination: $dest';
}
if ($request_method = MKCOL) {
rewrite ^(.*[^/])$ $1/ break;
}
if ($request_method = PROPPATCH) {
add_header Content-Type 'text/xml';
return 207 '<?xml version="1.0"?><a:multistatus xmlns:a="DAV:"><a:response><a:propstat><a:status>HTTP/1.1 200 OK</a:status></a:propstat></a:response></a:multistatus>';
}
}
}
访问 https://a.webdav.example.com, 将访问 /webdav/root/a/ 下的存储空间, 使用 /webdav/auth/a 文件为用户验证文件.