Azure 应用服务上的 Drupal 9 文件存储

Azure 应用服务上的 Drupal 9 文件存储

这个问题已经困扰了我一个月了。在 Azure App 服务上设置 Drupal 9,并使用运行 php8 的 docker 镜像(基础镜像 drupal:9.1.7-php8.0-apache)我发现有两种方法可以在 Azure 中提供“sites/default/files”公共文件目录:

将“sites/default/files”文件夹符号链接到“/home/files”文件夹,并在应用程序设置中将 WEBSITES_ENABLE_APP_SERVICE_STORAGE 设置为 true。使用路径映射(当前处于预览状态)将 Azure 文件共享直接挂载到“sites/default/files”文件夹之上。这两个选项都有效,我的文件已成功上传,我可以在存储中看到它们。Drupal 也可以看到这些文件,但每次我尝试访问任何上传的文件时,都会出现 500 错误,唯一的错误是Failed to forward request to application. Encountered a System.Net.Http.HttpRequestException exception after 119.915ms with message: Received an invalid status line: 'anges: bytes'.. Check application logs to verify the application is properly handling HTTP traffic.如果我删除上传的文件,应用程序会做出反应并显示该文件未找到。

看来 azure 通常只提供文本文件,因为 css/js/txt 文件可以正常传输,只有图像。假设我上传了 sample.png 图像,它显示 500 错误。如果我将该图像更改为 sample.txt,它甚至不显示文本,而是显示整个图像,没有任何问题,如果我下载该 sample.txt 并将其更改为 sample.png,则图像在 Windows 中正常显示。所以我认为这只是图像问题(编辑:尝试了 .zip 和 .docx,也出现错误 500)。

如果我禁用持久存储(上面提到的任何选项),文件就会正确上传,不会显示任何错误,但问题是每次重新启动或部署应用程序时,文件就会消失。

Drupal 的日志中没有错误。Apache 日志中没有更多有用的信息(GET 似乎没问题,返回 200)。尝试过弄乱 apache.conf、php.ini,以及允许各种讨厌的事情的两个 .htaccess 文件,但仍然毫无头绪。多位同事研究过这个问题,但似乎都无济于事。

答案1

快速更新:尝试了我能想到的所有办法。很多人都尝试过并提供帮助,但都出现了相同的错误 500 或 502。两周来微软支持部门没有给出任何答复。

创建新的应用服务,不是使用 docker 容器,而是使用 php 7.4,并手动将所有 drupal 文件上传到 /home/site/wwwroot,同时将 WEBSITES_ENABLE_APP_SERVICE_STORAGE 设置为 true,以便 /home 目录保持持久,并且网络似乎运行良好,文件都很好。

在之前的尝试中,现在 azure ssh 显示 /home 目录中的所有文件都是 nobody:nogroup 777,将进一步调查这一点,因为如果这是真的,这可能会导致一些安全问题(但检查了 settings.php 等文件,它们至少受到了保护,不会被网络访问)

相关内容