大文件上传到 nginx 失败

Posted

技术标签:

【中文标题】大文件上传到 nginx 失败【英文标题】:Large file upload to nginx fails 【发布时间】:2019-01-23 05:29:50 【问题描述】:

我使用 nginx 作为反向代理。客户端应用程序在 POST 请求中上传多个图像文件。对于较大的请求,请求通常在 8M 和 9M 之间。我尝试了多种选择,包括设置 client_max_body_size。我已将值增加到 300M。我也尝试了其他一些选项。

nginx配置文件如下:

server 
    listen 443 ssl ;
    server_name app.example.com;
    charset utf-8;
    client_max_body_size 200M;
    # client_body_in_file_only on;
    # client_body_temp_path /var/spool/nginx;
    # client_body_buffer_size 32K;
    location / 
        alias /var/www/html/;
        try_files $uri /index.html;
    
    location /api 
        proxy_pass http://localhost:8092/api;
        proxy_set_header Host $host;
    

错误日志是

[错误] 22959#22959: *4 客户端打算发送太大的正文:8326396 字节,客户端:

【问题讨论】:

我看到你的配置是 HTTPS 的,你有类似的 HTTP 配置吗?客户端确定连接到 HTTPS 端口了吗? @kristaps 客户端只连接到 HTTPS。我有一个 HTTP 配置,它将用户重定向到 HTTPS。 【参考方案1】:

您可能会遇到配置范围问题,请尝试在 http 块内声明 client_max_body_size 200M;。你会发现它在/etc/nginx/nginx.conf

如果这不起作用,请尝试在特定的 location 块内声明。

如果这不起作用,可能是您的配置中有一些错误,您可以使用它来检查

$ nginx -t

如果没有错误,请尝试重新启动服务器而不是仅重新加载它:

$ service nginx restart

如果你仍然没有成功,可能你的 API 的最大上传大小有问题,这取决于你的系统堆栈如何修复它。

【讨论】:

以上是关于大文件上传到 nginx 失败的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Nginx(反向代理+SSL 协商)和 Tomcat 上传大文件

PHP代码中使用post参数上传大文件

如何解决nginx上传大文件的限制

有没有办法在 nginx 上使用 django 上传一个非常大的文件?

cgi+lighttpd上传大文件失败解决办法

nginx由于权限导致大文件不能上传的问题