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

Ubuntu 20.04下curl上传文件到Apache报405 Method Not Allowed错误

问题根因

配置不生效、持续返回405有三个核心问题:

  • 仅配置AllowMethods只会声明允许的HTTP方法,Apache默认没有内置PUT请求的处理逻辑,必须启用对应模块处理文件写入操作,单纯开方法权限没有实际作用
  • <Location>指令匹配的是URL路径而非本地磁盘路径,原配置里写的<Location /var/www/example/html>完全匹配不到https://example.com/web/的请求路径,规则根本没命中
  • 配置存在语法和冗余问题:Options行末尾多了多余的.,Allow from all是Apache 2.2版本的旧访问控制语法,和2.4版本的Require all granted重复,另外Alias和目录规则写在VirtualHost块外部,也可能被虚拟主机内的默认规则覆盖。
修复步骤

1. 启用依赖模块

Apache处理PUT文件上传需要依赖WebDAV相关模块,执行命令启用:

sudo a2enmod dav dav_fs

2. 修正站点配置

编辑/etc/apache2/sites-enabled/example.com-ssl.conf,把Alias、目录权限相关配置全部移到<VirtualHost *:443>块内部,替换为以下内容,删掉原来写在VirtualHost外面的配置和错误的Location块:

Alias /web "/var/www/example/html"
<Directory "/var/www/example/html">
    Options Indexes MultiViews FollowSymLinks Includes ExecCGI
    AllowOverride None
    Require all granted
    # 开启DAV写入支持,真正处理PUT请求
    DAV On
    # 限制允许的请求方法
    <LimitExcept GET POST OPTIONS HEAD PUT>
        Require all denied
    </LimitExcept>
</Directory>

3. 配置目录写入权限

Ubuntu下Apache默认运行用户是www-data,需要给上传目录开放写入权限:

sudo chown -R www-data:www-data /var/www/example/html
sudo chmod 755 /var/www/example/html

4. 校验配置并重载服务

先执行配置语法检查,避免配置错误导致服务异常:

sudo apache2ctl configtest

返回Syntax OK后重载服务生效:

sudo systemctl reload apache2
验证测试

重新执行curl命令测试上传,建议在URL末尾明确指定上传后的目标文件名,避免目录路径解析问题:

curl -v --insecure -T http-100M.dat https://example.com/web/http-100M.dat

注意:如果需要开放匿名上传,建议额外配置上传目录的执行权限限制,避免上传可执行脚本带来安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:30:45