Nginx WebDAV仅写入权限配置问题咨询
Nginx WebDAV仅写入权限配置问题咨询
嘿,这个需求我之前折腾过,刚好能给你指条明路!你遇到的问题核心其实是:dav_access管的是文件系统层面的权限,而不是Nginx对客户端请求的访问控制,所以光改它肯定没用。我们要从拦截读取请求的角度入手,直接把GET/HEAD这类能获取文件内容的请求给挡住。
给你两个靠谱的配置方案,选哪个都能实现纯写入的效果:
方案一:用if指令直接拦截读取请求
在你现有的location块里,先加一段匹配GET和HEAD请求的规则,直接返回403禁止访问,这样上传不受影响,但之后再想访问文件就会被拒绝:
location ~ "/webdav/([0-9a-zA-Z-.]*)$" { alias /storage/www/webdav/$1; client_body_temp_path /tmp/upl_tmp; # 拦截所有读取类请求 if ($request_method ~ ^(GET|HEAD)$) { return 403; } dav_methods PUT DELETE MKCOL COPY MOVE; create_full_put_path on; dav_access group:rw all:r; }
方案二:用limit_except更优雅地控制(推荐)
Nginx专门有个limit_except指令,用来定义「除了这些方法之外,其他都禁止」,写法更规范,也符合Nginx的配置最佳实践:
location ~ "/webdav/([0-9a-zA-Z-.]*)$" { alias /storage/www/webdav/$1; client_body_temp_path /tmp/upl_tmp; # 只允许指定的WebDAV写入方法,其他全部拒绝 limit_except PUT DELETE MKCOL COPY MOVE { deny all; } dav_methods PUT DELETE MKCOL COPY MOVE; create_full_put_path on; dav_access group:rw all:r; }
补充说明下为什么之前改dav_access没用
dav_access其实是设置Nginx在创建文件/目录时,赋予的文件系统权限(比如让文件属于某个组,组有读写权),它管不了Nginx接收到客户端GET请求后会不会去返回文件内容。而且Nginx确实不认可只有写权限的配置,因为它在处理上传时可能需要临时读取文件做校验,所以这个思路从根上就行不通。
最后别忘了测试
改完配置后,先执行nginx -s reload重载配置,然后用curl验证:
- 上传测试:
curl.exe -T foo.txt https://webserver.com/webdav/foo.txt应该能成功上传 - 读取测试:
curl.exe https://webserver.com/webdav/foo.txt应该返回403 Forbidden,完美实现纯写入的需求
备注:内容来源于stack exchange,提问作者Peleus
相关产品推荐
相关产品推荐

