600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > nginx 上传 文件超时设置_Nginx大文件上传413和500问题排查总结

nginx 上传 文件超时设置_Nginx大文件上传413和500问题排查总结

时间:2018-10-22 20:49:26

相关推荐

nginx 上传 文件超时设置_Nginx大文件上传413和500问题排查总结

背景

前几天上传一个300MB的文件,发现报错,这里说明一下,用户的请求会通过Nginx代理(负载均衡)到应用服务器。

413问题解决

错误信息为“413 Request Entity Too Large”

查看Nginx日志,错误信息如下:

/09/10 11:14:47 [error] 253#0: *13083 client intended to send too large body: 392820633 bytes, client: 192.22.141.3, server: , request: "POST /file/uploadImage HTTP/1.1", host: ""

从日志文件可以看出上传的文件太大了,超出了Nginx配置的最大值,查看Nginx配置,发现client_max_body_size 200m;设置的太小了,于是修改配置client_max_body_size 500m;默认情况下client_max_body_size是1MB。

重启Nginx后,重新上传文件,该问题解决,但是发现另外一个问题。

500问题解决

如下图所示,错误信息为“500 Internal Server Error”

查看Nginx日志,错误信息如下:

/09/10 11:34:31 [warn] 249#0: *13247 a client request body is buffered to a temporary file /dev/shm/nginx_temp/client_body/0000000037, client: 192.22.141.3, server: , request: "POST /file/uploadImage HTTP/1.1", host: ""

/09/10 11:36:52 [crit] 249#0: *13247 pwrite() "/dev/shm/nginx_temp/client_body/0000000037" failed (28: No space left on device), client: 192.22.141.3, server: , request: "POST /file/uploadImage HTTP/1.1", host: ""

从日志中可以看出:(1)上传的文件会缓存到临时文件“/dev/shm/nginx_temp/client_body/0000000037”中;(2)临时文件的空间不足;

实际上,上传的文件会首先保存到缓冲区中,client_body_buffer_size可以配置缓冲区的大小,只有当文件超过缓冲区的大小才会缓存到临时文件中。

这里的/dev/shm目录其实就是内存,默认是总内存的一半,可以把这个目录当作一个高速磁盘来用,很多应用程序为了提升性能都会把临时文件存放在里面。

要解决这个问题,修改临时文件路径就可以client_body_temp_path /export/data/temp/;

总结

以上就是解决问题的思路,实际上一句话就可以概括,修改下面两个配置就可以解决问题:

# 设置上传文件的最大值

client_max_body_size 500m;

# 设置临时文件存放路径

client_body_temp_path /export/data/temp/;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。