You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:44:50