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

Drupal 7+AWS ELB多EC2实例下Plupload上传图片报错求助

解决Drupal 7+ELB+Auto Scaling下Plupload临时文件找不到的问题

我之前在处理Drupal 7搭配AWS ELB和Auto Scaling的架构时,遇到过完全一样的Plupload批量上传问题。你的情况核心原因很明确:Plupload的临时文件默认存在单台EC2实例的本地磁盘,高负载时Auto Scaling新增实例后,ELB会把后续的上传请求分发到不同的实例,新实例根本找不到之前上传到其他实例的临时文件,就会抛出你看到的报错。

下面是几个可行的解决方案,按推荐优先级排序:

1. 配置共享临时文件存储(最推荐,根治问题)

使用AWS EFS(弹性文件系统)作为所有EC2实例的共享临时目录,这样不管请求路由到哪台实例,都能访问到同一个临时文件存储位置:

  • 先创建并配置EFS,确保所有EC2实例所在的VPC和安全组能访问它;
  • 将EFS挂载到每台EC2实例的同一个路径,比如/mnt/efs/tmp;
  • 修改Drupal的临时文件路径配置,在sites/default/settings.php中添加或修改:
    $conf['file_temporary_path'] = '/mnt/efs/tmp';
    
  • 确保Web服务器用户(比如apache或nginx)对这个共享目录有读写权限:
    chown -R apache:apache /mnt/efs/tmp
    chmod -R 775 /mnt/efs/tmp
    

2. 开启ELB会话粘性(临时缓解方案)

如果暂时来不及配置共享存储,可以开启ELB的会话粘性(Sticky Sessions),让同一个用户的所有请求都固定路由到同一台EC2实例,这样临时文件就能在同一台实例上被找到。不过要注意:

  • 这只是临时方案,Auto Scaling缩容销毁实例时,用户的会话和未完成的上传会直接失败;
  • 会话粘性会降低ELB的负载均衡效果,不适合长期依赖。

3. 调整Plupload上传配置

修改Plupload的上传模式,跳过本地临时文件直接上传到目标目录,或者确保分块上传的每个分块能被所有实例访问:

  • 进入Drupal的Plupload配置页面(路径通常是admin/config/media/plupload);
  • 查找是否有“直接上传到目标目录”的选项,开启它;
  • 如果是分块上传,确保分块存储的路径是共享目录(和方案1的共享路径一致)。

4. 检查并统一实例权限

确保所有EC2实例上的Drupal相关目录权限一致,Web服务器用户拥有足够的读写权限,避免因为权限问题导致临时文件无法被读取或写入。

优先推荐第一种方案,共享存储从根本上解决了多实例环境下的文件共享问题,适合长期运行的高可用站点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:23:35