python - django + ngnix,提供媒体文件
问题描述
我直接向您展示我的代码:
我处理ewayApp/media/{stuff}
与 django 的链接:
urls.py:
path('ewayApp/media/<str:media_url_1>/<str:media_url_2>/<str:media_url_3>',course.getMedia),
处理程序:
course.py:
def getMedia(request, media_url_1, media_url_2, media_url_3):
...some stuff...
url = '/protected/' + media_url_1+'/'+media_url_2+'/'+media_url_3
response['X-Accel-Redirect'] = url
return response
我肯定会通过这个函数的第一个链接,因为我沿着函数有一些打印。
我的 ngnix 设置:
location ~ / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:8080;
}
location ^~ /protected/ {
internal;
alias path/to/media/media/;
}
因此,django 服务器在 127.0.0.1:8080 上运行,ngnix 代理那里的所有请求。访问这些媒体文件时,如果我直接访问链接https://website.com/ewayApp/media/{stuff} ngnix 会返回 404 未找到错误。我检查了媒体是否存储在path/to/media/media/
,它们是,但显然在子目录中media_url_1
,media_url_1
...{stuff}
如何解决这个问题?
提前致谢。
编辑:
只是为了告诉你链接是正确的,因为如果我将 django 的调试标志设置为 True,则会显示媒体文件,所以所有内容都存储在正确的位置并且链接也是正确的,但是我无法显示使用这个加速重定向 + ngnix
解决了:
正如 Mh Eftekhari 所建议的,我做了一些与他回答类似的事情,但添加了“^~”,这是我对 ngnix 设置的解决方案:
location ^~/protected/ {
internal;
alias /path/to/media/media;
try_files $uri $uri/ =404;
}
location ~ / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
##Use the domain.tld here.
proxy_pass http://127.0.0.1:8080;
}
解决方案
将您的配置更改为此
location /protected{
alias path/to/media/media/;
try_files $uri $uri/ =404;
}
推荐阅读
- javascript - 为什么构造函数不更改 Angular 中的服务器状态和背景颜色?
- html - HTML 减少行距和列宽
- swift - 尝试通过在 tableview 单元格中点击 MKMapView 来扩展地图全屏
- mongodb - 分片集群的mongodb写关注
- r - 整数的绝对值
- typescript - 是否可以将字符串数组转换为字符串文字联合类型?
- java - Gemfire 的光标等效项?
- javascript - HTML/Js/Css - 选择一个随机元素来改变颜色
- firebase - Firebase 存储安全。为什么我可以复制/粘贴链接到我的文件并在浏览器中打开它们?
- apache-kafka - Kafka Streams KTable-KTable outerJoin 发出 oldValue 而不是 newValue