nginx returns 上传大文件(几 GB)时出现内部服务器错误
nginx returns Internal Server Error when uploading large files (several GB)
我在 nginx 后面有一个 Artifactory,上传大于 4 GB 的文件失败。我很确定这是nginx的错,因为如果文件上传到from/to localhost,不会出现问题。
nginx 设置为 client_max_body_size
和 client_body_timeout
足够大,这不会成为问题。
仍然,当通过 curl 上传大文件 (>4 GB) 时,大约半分钟后失败。我收到的唯一错误消息是 HTTP 500 Internal Server Error
,没有任何内容写入 nginx 的错误日志。
我的问题是安装在 root 上的磁盘 space 不足。我在 /home
上安装了一个巨大的磁盘,但在 /
上只剩下大约 4 GB。我假设 nginx 在那里保存传入的请求主体,在它填满后,请求被关闭。
我修复它的方法是将这些行添加到 nginx.conf
文件(不一定需要所有行):
http {
(...)
client_max_body_size 100G;
client_body_timeout 300s;
client_body_in_file_only clean;
client_body_buffer_size 16K;
client_body_temp_path /home/nginx/client_body_temp;
}
最后一行是重要的部分 - 我告诉 nginx fiddle 及其在 /home
space.
中的文件
我在 nginx 后面有一个 Artifactory,上传大于 4 GB 的文件失败。我很确定这是nginx的错,因为如果文件上传到from/to localhost,不会出现问题。
nginx 设置为 client_max_body_size
和 client_body_timeout
足够大,这不会成为问题。
仍然,当通过 curl 上传大文件 (>4 GB) 时,大约半分钟后失败。我收到的唯一错误消息是 HTTP 500 Internal Server Error
,没有任何内容写入 nginx 的错误日志。
我的问题是安装在 root 上的磁盘 space 不足。我在 /home
上安装了一个巨大的磁盘,但在 /
上只剩下大约 4 GB。我假设 nginx 在那里保存传入的请求主体,在它填满后,请求被关闭。
我修复它的方法是将这些行添加到 nginx.conf
文件(不一定需要所有行):
http {
(...)
client_max_body_size 100G;
client_body_timeout 300s;
client_body_in_file_only clean;
client_body_buffer_size 16K;
client_body_temp_path /home/nginx/client_body_temp;
}
最后一行是重要的部分 - 我告诉 nginx fiddle 及其在 /home
space.