DDEV Drupal:backup_migrate模块GZip备份无法恢复的配置咨询
解决DDEV Nginx环境下Backup and Migrate GZip备份404问题
嘿,这个问题我之前帮人排查过,确实是Nginx默认配置的小疏漏导致的!咱们一步步来理清楚:
问题根源
当Backup and Migrate把GZip压缩的备份存到私有文件目录后,Nginx会直接识别.gz后缀的文件,试图从磁盘直接读取,但私有目录本身不在Web根目录的直接访问路径里,而且Drupal的私有文件访问本来是要通过PHP脚本(比如system/files路由)来做权限校验的,Nginx跳过了这个流程,自然就返回404了。而Zip格式没问题,是因为Nginx默认没对.zip做这类直接解析的规则,请求会正常交给Drupal处理。
解决方案:添加自定义Nginx规则
你只需要给DDEV的Nginx加一条简单的配置规则,就能搞定:
创建自定义Nginx配置文件
在你的DDEV项目根目录下,先建.ddev/nginx文件夹(如果还没有的话),然后新建nginx-site.conf文件,写入以下内容:location ~* \.gz$ { try_files $uri /index.php?$query_string; }这条规则的作用是:所有
.gz结尾的请求,都转发到Drupal的index.php,让Drupal来处理权限校验和文件读取,而不是Nginx直接去磁盘找文件。重启DDEV服务
执行命令让配置生效:ddev restart测试验证
重新生成一个GZip格式的备份,再尝试下载或恢复,应该就不会再出现404错误啦!
补充说明
为啥DrupalVM或Acquia Dev Desktop没这个问题?因为它们的默认Web服务器配置(不管是Nginx还是Apache)已经内置了处理这类私有文件的规则,而DDEV的基础Nginx镜像为了轻量化,没包含这条规则,所以需要咱们手动补上。
内容的提问来源于stack exchange,提问作者MrPaulDriver
相关产品推荐
相关产品推荐

