在 Nginx 的 HTTP Basic 认证与WebDav – 未名 中,确认了 Nginx for Windows 是无法开启WebDav的,只能使用第三方软件来实现了。
hacdias/webdav
一个很简单,很纯粹的全平台 WebDav 服务端工具,正如网站介绍:A simple and standalone WebDAV server.
最新版本是v5.8,下载:Windows X64。
配置 config.yml
解压zip包后,在webdav.exe的目录下,创建config.yml文件,内容如下:
# 修改配置后,要重启 webdav.exe 生效: nssm restart WebDav
address: 0.0.0.0
port: 6065
prefix: /
debug: false
noSniff: false
# 在受信任的代理后面运行
behindProxy: true
# 默认主目录。
directory: D:\WebDavFiles\default
# 默认权限,可以组合的值: C (Create), R (Read), U (Update), D (Delete). 比如:RC
permissions: R
# 默认权限规则,[]代表无,有配置时:规则从最后到第一个应用,与请求匹配的第一个规则,就应用。path始终相对于主目录。
#rules: []
rules:
- path: /单个文件最大5M.txt
permissions: R
# 权限规则继承策略:overwrite=覆盖,append=追加
rulesBehavior: overwrite
# 日志:format有console|json,outputs有stderr,或file.log
log:
format: console
colors: true
outputs:
- D:\Logs\WebDavConsole.log
# CORS 跨域资源共享配置,直接关闭,不用了解。
cors:
enabled: false
credentials: true
allowed_headers:
- Depth
allowed_hosts:
- http://localhost:8181
allowed_methods:
- GET
exposed_headers:
- Content-Length
- Content-Range
# 用户列表:为空,则不会进行身份验证。否则,将自动配置基本身份验证。如果将身份验证委托给其他服务,则使用基本身份验证代理用户名,然后使用以下选项禁用 webdav 的密码检查:
# noPassword: true
users:
- username: admin
password: admin
directory: D:\WebDavFiles\liang
permissions: CRUD
rules:
- path: /单个文件最大5M.txt
permissions: R
# ********************************* 示例 *********************************
# - username: admin
# 从环境中获取其ENV_USERNAME变量的值
# - username: "{env}ENV_USERNAME"
# 使用明文密码示例
# password: admin
# 使用 webdav.exe bcrypt 生成加密密码示例
# password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
# 从环境中获取其ENV_PASSWORD变量的值
# password: "{env}ENV_PASSWORD"
# 可选:用户主目录,覆盖默认主目录,绝对路径
# directory: D:\Tmp
# 可选:用户权限,覆盖默认权限
# permissions: CRUD
# 可选:用户权限规则,path: 针对相对路径的权限限制;regex: 针对文件名正则匹配的权限限制;permissions: none/R/C/U/D/组合
# rules:
# 用户对 {user directory}/some/files 无法访问
# - path: /some/file
# permissions: none
# 用户对 {user directory}/public/access 有CRUD权限
# - path: /public/access/
# permissions: CRUD
# 用户对 .js文件,有RU权限
# - regex: "^.+.js$"
# permissions: RU运行
方式一:直接在CMD中执行webdav.exe就可了。
方式二:使用 nssm.exe 工具,注册为系统服务运行。
@echo off
rem nssm.exe在同一个目录中
call :install WebDav
rem WebDavFiles目录、logDir目录:要有Network Service的NTFS权限。 %~dp0logs C:\inetTmp\RDSLogs
cacls D:\WebDavFiles /t /e /g "NT AUTHORITY\NETWORK SERVICE:F"
cacls %logDir% /t /e /g "NT AUTHORITY\NETWORK SERVICE:F"
cacls %~dp0 /t /e /g "NT AUTHORITY\NETWORK SERVICE:F"
goto batEnd
:install
rem WebDavFiles目录、logDir目录:要有Network Service的NTFS权限。
set logDir=D:\Logs
"%~dp0nssm.exe" install "%1" "%~dp0%1.exe"
"%~dp0nssm.exe" set "%1" DisplayName "%1 Server"
REM "%~dp0nssm.exe" set "%1" Description "%1 Server"
"%~dp0nssm.exe" set "%1" Start SERVICE_AUTO_START
"%~dp0nssm.exe" set "%1" ObjectName NetworkService
"%~dp0nssm.exe" set "%1" Type SERVICE_WIN32_OWN_PROCESS
"%~dp0nssm.exe" set "%1" AppThrottle 1000
"%~dp0nssm.exe" set "%1" AppExit Default Restart
"%~dp0nssm.exe" set "%1" AppRestartDelay 0
"%~dp0nssm.exe" set "%1" AppStdout "%logDir%\%1_out.log"
"%~dp0nssm.exe" set "%1" AppStderr "%logDir%\%1_err.log"
goto :eof
:batEnd
"%~dp0nssm.exe" start WebDavNginx 配置
# 上传文件大小上限
client_max_body_size 5m;
location / {
proxy_pass http://127.0.0.1:6065;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
# Ensure COPY and MOVE commands work.
set $dest $http_destination;
if ($http_destination ~ "^$scheme://$host(?<path>(.+))") {
set $dest /$path;
}
proxy_set_header Destination $dest;
}rclone serve webdav
Rclone是一个同步工具(只有单向同步测试成功,双向同步在 Windows + S3自建、OneDrive 下没有测试成功。),但通过 rclone serve 命令(下载、官方文档、中文站文档)可以提供DLNA、FTP、SFTP、HTTP、WebDav、S3、restic’s REST API、NFS等,访问本地文件内容。
rclone.conf 配置文件生成
在终端里,通过 rclone.exe config 交互方式生成此文件;由于访问本地文件系统的配置内容简单,可以直接新建UTF-8文本文件解决,放以下内容:
[Local]
type = local
- 如果不是 rclone.exe config file 的位置,需要后续 rclone.exe 命令中,增加 –config %exeDir%\rclone.conf 参数。
- 在终端中执行命令,看是否显示C盘的文件夹名称,验证配置:
- 注意:Local是区分大写的,要与rclone.conf文件中[]内容一模一样。
rclone lsd Local:c:\
htpasswd.conf 身份验证文件生成
在 windows 下使用 htpasswd :
- 方法1:下载 Apache zip包,后到 bin 目录下运行 htpasswd -v 验证
- 方法2:使用在线htpasswd生成工具
新建UTF-8文本文件,一行一个用户。
不支持按用户,配置各自主目录,所有用户都是在一个目录中。
运行rclone serve webdav
直接在终端中,执行:
rclone serve webdav Local:D:\
如果没有端口被占用,就可以看到日志输出:
2025/09/19 20:41:50 NOTICE: Local file system at //?/D:/: WebDav Server started on [http://127.0.0.1:8080/]
使用 nssm.exe 安装 rclone serve webdav 为 Windows 系统服务
- 在第11行中:
- Local:D:\WebDavFiles\ 为WebDav网站的根目录;
- –addr :8000 为监听IP与端口号,自行修改;
- 由于会使用Nginx代理,所以不需要指这ca与kay文件。
@echo off
rem nssm.exe在同一个目录中
call :install Rclone
rem WebDavFiles目录、logDir目录:要有Network Service的NTFS权限。 %~dp0logs C:\inetTmp\RDSLogs
cacls D:\WebDavFiles /t /e /g "NT AUTHORITY\NETWORK SERVICE:F"
cacls %~dp0 /t /e /g "NT AUTHORITY\NETWORK SERVICE:F"
goto batEnd
:install
"%~dp0nssm.exe" install "%1" "%~dp0%1.exe" "serve webdav Local:D:\WebDavFiles\ --config %~dp0Rclone.conf --copy-links --log-file %~dp0%1.log --etag-hash auto --addr :8000 --htpasswd %~dp0htpasswd.conf"
"%~dp0nssm.exe" set "%1" DisplayName "%1 WebDav Server"
REM "%~dp0nssm.exe" set "%1" Description "%1 Server"
"%~dp0nssm.exe" set "%1" Start SERVICE_AUTO_START
"%~dp0nssm.exe" set "%1" ObjectName NetworkService
"%~dp0nssm.exe" set "%1" Type SERVICE_WIN32_OWN_PROCESS
"%~dp0nssm.exe" set "%1" AppThrottle 1500
"%~dp0nssm.exe" set "%1" AppExit Default Restart
"%~dp0nssm.exe" set "%1" AppRestartDelay 0
"%~dp0nssm.exe" set "%1" AppStdout "%logDir%\%1_out.log"
"%~dp0nssm.exe" set "%1" AppStderr "%logDir%\%1_err.log"
goto :eof
:batEnd
REM "%~dp0nssm.exe" edit Rclone
"%~dp0nssm.exe" start RcloneNginx 配置
location / {
# proxy_request_buffering on(默认):NGINX 会在转发请求前,先将整个请求体读完并缓存在本地。off:NGINX 会 边读取请求体边转发到后端,即 流式转发。
proxy_request_buffering off;
proxy_pass http://127.0.0.1:8000;
# 支持 WebSocket 协议
#proxy_http_version 1.1;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_redirect off;
}openList的WebDav服务端
下载:OpenList
openlist.bat
双击后,已启动了就是关闭,没有启动就启动且打开 http://localhost:5244 。
@echo off
rem 与openlist.exe同目录,bat文件名不要改。
set Console=C:\Sysinternals\Console
%Console%\pslist64.exe -nobanner openlist
if %errorlevel% equ 0 (
%~dpn0.exe stop
) else (
%Console%\RunHiddenConsole.exe %~dpn0.exe start
timeout 3 > nul
start http://localhost:5244
)开启WebDav服务端
在openList中,支持本地文件系统(存储中选择本机存储)挂载,也支持开启WebDAV client访问。开启方法很简单:
- 先在用户中开启webdav读取与管理权限,及其他管理权限(增删改) ;
- 再通过 http://localhost:5244/dav/ 访问,如果不成功,重做第1步且重启就可以了。

Nginx配置
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass http://127.0.0.1:5244;
proxy_http_version 1.1;
# the max size of file to upload
client_max_body_size 20000m;
}开启Ftp/Sftp服务端
openList中也支持开启Ftp/Sftp client访问,开启方法简单:
- 先在用户中开启ftp读取与管理,及其他管理权限(增删改);
- 再到 data\config.json 中,修改配置开启(见下图);
- 后重启,通过 http://localhost:5244/dav/ 访问。
官方文档:Ftp/Sftp服务端、S3对像存储

发表回复