我对此并不陌生,但是我对它的工作原理的理解如下:
从nginx请求私有文件
nginx将其转发给Django
django执行其操作,并返回包含X-Accel-Redirect
标头的响应
nginx看到此标头并提供文件。
我已经像这样设置了我的nginx conf:
upstream foo_app_server {
server unix:/home/project_dir/gunicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name foo.com;
client_max_body_size 4G;
location /static/ {
alias /home/projec_dir/static/;
}
location /media/private/ {
internal;
alias /home/project_dir/media/private/;
}
location /media/ {
alias /home/project_dir/media/public/;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://foo_app_server;
}
}
现在,django已成功接收media / private中的文件请求,并且已成功将X-Accel-Redirect标头附加到响应。
当请求的路径的格式为media/private/some/path/to/file.pdf
时,我已经尝试了以下方法来处理标头的内容
X-Accel-Redirect:
media/private/some/path/to/file.pdf
private/some/path/to/file.pdf
path/to/file.pdf
所有人都给了我404错误。该文件确实存在。
我认为这只是路径问题,因为标头中的路径与nginx conf中的位置和别名之间不匹配,但是我尝试了一段时间,但无法获得正确的组合。 / p>
以前做过此事的人能否提出nginx到底在寻找什么?