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

如何在Nginx中配置PUT/DELETE方法适配Laravel并避免文件误删?

问题原因与解决方案

当你在Nginx中启用dav_methods DELETE PUT后,Nginx的DAV模块会直接接管对应HTTP方法的请求处理,不会将这类请求转发给php-fpm。所以当你用DELETE方法请求index.php时,DAV模块直接执行了文件删除操作,而非让PHP处理该请求。

解决方法

  • 缩小DAV模块的作用范围:将DAV配置仅应用到需要的目录(比如静态资源上传目录),不要覆盖PHP文件所在路径。示例配置:
# 仅在/uploads目录启用DAV的DELETE和PUT方法
location /uploads {
    dav_methods DELETE PUT;
    create_full_put_path on;
    dav_access user:rw group:rw all:r;
}

# PHP文件请求正常转发给php-fpm
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}
  • 针对PHP文件排除DAV方法处理:如果必须在PHP文件所在目录启用DAV,通过limit_except指令限制PHP文件仅接受常规HTTP方法(GET/POST/HEAD),阻止DAV模块处理PHP文件的DELETE/PUT请求。示例配置:
location / {
    dav_methods DELETE PUT;
    create_full_put_path on;
    dav_access user:rw group:rw all:r;

    # 对非GET/POST/HEAD的请求,拦截PHP文件的访问
    limit_except GET POST HEAD {
        if ($request_uri ~* \.php$) {
            return 403;
        }
    }
}

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

    # 明确禁止PHP文件接受DELETE/PUT等方法
    limit_except GET POST HEAD {
        return 403;
    }
}
  • 额外安全建议:配置DAV时严格控制权限,通过dav_access设置合理的文件读写权限;确保Nginx运行用户和php-fpm运行用户的权限隔离,避免因权限重叠导致误操作。

内容的提问来源于stack exchange,提问作者Evgeniy Artemyev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:48:20