用nginx和django提供文件

我正在尝试使用X-Accel-Redirect标头按照本教程(和许多其他)使用nginx来提供受保护的文件。

物理path: /home/media/file.pdf

url: example.com/media/file.pdf

nginxconfiguration:

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

在Django中,我有一个中间件,它检查用户是否被authentication,如果是的话,使用X-Accel-Redirect for nginx来传递文件:

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

当我尝试访问文件时,我得到404错误(访问日志中请求的文件path正常)。 在我看来,Nginx不会将请求传递给Django,只是以404错误结束。

任何想法我可能做错了什么? 有没有一个好的方法来debugging呢? 提前致谢。

问题是aliasroot之间的区别。 使用定义的alias ,URI /media/file.pdf将映射到物理位置/home/file.pdf

你需要使用root

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

看到这个和这个细节。