我的应用程序(Django + Gunicorn + Nginx)运行在Docker上有问题。我正在使用X-Accel-Redirect头来为受保护的文件提供服务。服务只有ASCII字符的文件工作正常,但当我试图达到文件一样ksiēka.404.第404章我是你我已经检查了媒体目录和文件ksiąka。pdf存在。
在浏览器开发工具中,我可以看到请求是从/media/ksiąđka转换而来的。pdf到/media/ksi%C4%85%C5%BCka。PDF
nginx.conf
charset utf-8;
location /protected_media/ {
alias /var/media/;
internal;
}
views.py
@login_required
def protected_serve(request, path):
response = HttpResponse()
response['Content-Type']=""
response['X-Accel-Redirect'] = '/protected_media/' + path
return response
有没有人知道如何处理非ASCII字符的文件名?
1条答案
按热度按时间oug3syen1#
问题出在路径上。解决方案在这里:Convert an IRI path to URI before setting as NGINX header
NGINX不支持头中的非ASCII字符,因此我们需要将IRI路径转换为URI,以便与NGINX期望的头值兼容。
视图的最终代码: