我正在尝试使用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呢? 提前致谢。
问题是alias和root之间的区别。 使用定义的alias ,URI /media/file.pdf将映射到物理位置/home/file.pdf 。
你需要使用root :
location /media/ { internal; root /home; }
看到这个和这个细节。