nginx + gunicorn + django 中的文件上传和 client_max_body_size

nginx + gunicorn + django 中的文件上传和 client_max_body_size

我需要配置 nginx + gunicorn 以便能够在两个服务器中上传大于默认最大大小的文件。

我的 nginx.conf 文件如下所示:

server {
    # ...

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect   off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme  $scheme;
        proxy_connect_timeout 60;
        proxy_pass http://localhost:8000/;
    }
}

这个想法是允许两个位置的 20M 请求:

  • /admin/path/to/upload?param=value
  • /installer/other/path/to/upload?param=value

我尝试添加location与我在此处粘贴的指令处于同一级别的指令(出现 404 错误),也尝试将它们添加到指令内location /(出现413 Entity Too Large错误)。

我的位置指令最简单的形式如下:

location /admin/path/to/upload/ {
    client_max_body_size 20M;
}
location /installer/other/path/to/upload/ {
    client_max_body_size 20M;
}

但它们不起作用(实际上我测试了很多组合并且我对此感到绝望。

如果可以的话,请帮忙:我需要设置哪些设置才能使其正常工作?

太感谢了!

答案1

这最终起到了如下作用:

location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect   off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme  $scheme;
    proxy_set_header X-Forwarded-Protocol ssl;
    proxy_connect_timeout 120;
    proxy_pass http://localhost:8000/;

    location /admin/path/to/upload {
        client_max_body_size 50m;
        proxy_pass http://localhost:8000/admin/path/to/upload;
    }
}

答案2

听起来,当您client_max_body_size在非根位置时,它几乎可以正常工作。您是否还在dav_methods PUT;nginx conf 中设置了启用 PUT 和 DELETE 请求?

相关内容