xnix:nginx_webdav
这是本文档旧的修订版!
目录
搭建一个简单的 nginx webdav (FreeBSD)
功能简介
- 基于FreeBSD ports的nginx
- 多存储空间
- 用户验证
配置
FreeBSD Ports 编译
需要选上 HTTP_DAV, 第三方的 HEADERS_MORE 和 HTTP_DAV_EXT 模块
目录结构 及 变量
请自行修改以下
- /logs/ 日志存储目录
- /ssl/ SSL证书目录
- /webdav/ webdav主目录
- /webdav/root/ webdav多存储目录
- /webdav/auth/ basic auth用户验证 (htpasswd 格式)
- /webdav/temp/ 上传文件的临时目录
- webdav.example.com 为泛域名的基础域名
nginx.conf
加载模块
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;
vhosts 设置
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 文件为用户验证文件.
已知问题
Windows
- 添加 webdav 路径时, 不管由于任何错误失败后, 要等待一段时间才能重试, 否则一直失败. 解决方案就是等一阵子. 可以尝试重启 webclient 服务
- 默认文件限制为 50000000 字节, 对大于这个的文件下载会报 0x800700DF 错误. 解决方法: 修改注册表, 路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters 里面的 FileSizeLimitInBytes 值为十进制 4294967295 (默认值 50000000). 修改后重启系统或重启 webclient 服务
xnix/nginx_webdav.1696431665.txt.gz · 最后更改: 2023/10/04 23:01 由 Hshh