Django + Nginx-使用X-Accel-Redirect提供私人文件

时间:2019-04-06 23:06:06

标签: django nginx x-accel-redirect

我对此并不陌生,但是我对它的工作原理的理解如下:

从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到底在寻找什么?

0 个答案:

没有答案