如何解决Azure 应用服务上的 Drupal 9 文件存储
已经与这个问题斗争了一个月了。使用运行 PHP8 的 docker 图像在 Azure App 服务上设置 Drupal 9(基本图像 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.
如果我删除上传的文件,应用会做出反应并显示未找到该文件.
如果我禁用持久存储(上面提到的任何选项),文件会正确上传,不会显示任何错误,但问题是每次重新启动或部署应用程序时,文件都不见了。
Drupal 的日志中没有错误。 Apache 日志没有更多有用的信息(GET 似乎没问题并返回 200)。曾尝试使用 apache.conf、PHP.ini 和 .htaccess 文件来处理各种令人讨厌的事情,但仍然一无所知。让多位同事对此进行了调查,但似乎没有任何效果。
解决方法
快速更新:尝试了我能想到的最后一件事。有很多人尝试和帮助,但出现同样的错误 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 等文件,并且它们至少可以防止网络访问)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。