使用 nginx 和 django 提供文件服务

使用 nginx 和 django 提供文件服务

我正在尝试使用 nginx 提供受保护的文件X-Accel-重定向标题如下教程(以及许多其他教程)。

物理路径:/home/media/文件.pdf

网址:example.com/media/file.pdf

nginx配置:

location /media/ {
    internal;
    alias /home/;
}

在 django 中我有一个中间件,它检查用户是否已经过身份验证,如果是,则使用 nginx 的 X-Accel-Redirect 传递文件:

response["X-Accel-Redirect"] = request.path

当我尝试访问文件时,出现 404 错误(访问日志中请求的文件路径正常)。在我看来,nginx 不会将请求传递给 django,而只是以 404 错误结束。

知道我可能做错了什么吗? 有什么好方法可以调试吗? 提前致谢。

答案1

问题在于alias和之间的差异root。按照alias您的定义,URI/media/file.pdf将映射到物理位置/home/file.pdf

您需要使用root

location /media/ {
    internal;
    root /home;
}

了解详情。

相关内容