Drupal 9部署在Azure App Service时持久化存储下文件访问500错误问题
问题根因
你遇到的Received an invalid status line: 'anges: bytes'报错,本质是Azure App Service前端反向代理,与挂载持久化存储后Apache的静态文件处理逻辑冲突导致:远程挂载的Azure存储/持久化home目录不属于容器本地文件系统,Apache默认的Sendfile文件发送机制对远程挂载目录兼容异常,会导致响应头截断,前端代理无法识别正常响应,从而返回500错误。Apache本地日志显示200是因为文件读取本身没有问题,问题出现在响应回传代理的环节。
可行解决方案
方案1(快速生效,无兼容问题):禁用Range请求支持
直接在Drupal根目录的.htaccess文件,或者Apache站点配置文件中添加如下规则,关闭Range请求处理即可解决:
# 禁用Range请求,避免头截断问题 RequestHeader unset Range Header unset Accept-Ranges
修改完成后重启Apache服务即可,该方案仅会取消文件断点续传能力,不会影响站点的正常文件访问功能,适合大部分无断点续传强需求的场景。
方案2(保留Range请求能力):关闭Apache的Sendfile机制
在Apache的配置文件中,针对sites/default/files目录单独关闭Sendfile功能,禁用内核直接发送文件的逻辑,改用Apache用户态读取文件后返回:
<Directory "/var/www/html/sites/default/files"> EnableSendfile Off </Directory>
如果是用软链接到/home/files的方案,也可以直接针对/home/files目录设置规则:
<Directory "/home/files"> EnableSendfile Off </Directory>
该方案可以保留文件断点续传的能力,适配有视频、大文件分发需求的场景。
额外验证项
修改配置后可以再确认一次目录权限,确保容器内的Apache运行用户(默认www-data)对挂载的文件目录有读权限:
chown -R www-data:www-data /path/to/your/files/directory
内容的提问来源于stack exchange,提问作者Edvinas Kavaliauskas
相关产品推荐
相关产品推荐

