500 internal server error_Nginx大文件上传413和500问题排查总结

背景

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

413问题解决

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

3a507d9d34fe17cd8417ee4ad285758a.png

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

2020/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: "test.com"

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

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

500问题解决

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

f5ba4144ab1cbbfd71eaa5e2df02f9ae.png

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

2020/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: "test.com"

2020/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: "test.com"

从日志中可以看出:(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/;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值