需要选上 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 文件为用户验证文件.