nginx文件服务器上传报错 “401 authorization required”


ps:排查方向很长,可以直奔解决方案

问题描述

项目背景

  1. 因为公司有安全要求所有的应用都要接入阿里云的负载均衡,所以部署了nginx文件服务器后又接入到负载均衡给系统调用了
  2. 开发来反馈说上传大于512KB的文件就报错“java.net.SocketException: Connection reset”,无法上传文件
    在这里插入图片描述

排查方向

  1. . 我的第一想法就是nginx配置文件限制了文件的大小,所以修改了“ client_body_buffer_size”“client_header_buffer_size”等等跟大小相关的配置文件。(这里我要为自己的鲁莽干一杯,毕竟尝试了两天,修改了若干nginx)

  2. . 然后我想起来看日志报错才是明智的选择,所以配置了nginx日志。发现日志报错401
    日志如下:{ “@timestamp”: “29/Apr/2022:17:27:21 +0800”, “@fields”: { “uri”:“/abcd/20220429/4214/c54f8176040249cf8eeedaf806106bc2.png”,“url”:“/abcd/20220429/4214/c54f8176040249cf8eeedaf806106bc2.png”,“upstream_addr”:“-”,“remote_addr”: “10.97.134.68”, “remote_user”: “-”, “body_bytes_sent”: “179”, “http_Authorization”:“-”,“host”:“www.abcd.com.cn”,“server_addr”:“10.211.129.109”,“request_time”: “0.003”, “request_time”:“0.003”,“status”:“401”,“request”: “PUT /abcd/20220429/4214/c54f8176040249cf8eeedaf806106bc2.png HTTP/1.1”, “request_method”: “PUT”, “size”:179,“upstream_time”:“-”“http_referrer”: “-”, “body_bytes_sent”:“179”, “http_x_forwarded_for”: “10.190.0.17”, “http_user_agent”: “Jakarta Commons-HttpClient/3.1” } }

  3. 度了一下,nginx401报错是因为安全认证不通过,需要注释“auth_basic”和“auth_basic_user_file”,重启nginx。项目不需要密码认证的同学可以按照这个方案操作,然后下课了。

  4. 因为我的项目是需要密码认证的,所以我还需要继续排查,先检查客户端的请求头发现是带了认证信息的(很伤心,本来想帅锅给开发的)
    在这里插入图片描述

  5. 不能放弃啊,继续排查检查到阿里云的负载均衡了,这里提一嘴:七层负载是可以看日志的(嘻嘻)

  6. 发现不对劲的地方了,一个请求返回两次状态码,盲猜401是后端nginx返回的,那么400就是负载均衡返回的了。
    在这里插入图片描述

  7. 这时候我不得不怀疑是负载均衡吃掉了请求头,所以我把文件服务器从域名改成了后端地址,结果大文件竟然上传成功了。至于为啥负载均衡会吃掉请求头这点就不研究了,本酸菜鱼只想解决问题。附上成果图
    在这里插入图片描述
    在这里插入图片描述

解决方案

不需要密码认证

vim nginx.conf
# 注释这两行
	                # auth_basic "auth needed";
                   # auth_basic_user_file /opt/project/nginx/conf/passwd.conf;

# 重启服务
../../sbin/nginx -t
../../sbin/nginx  -s reload

在这里插入图片描述

需要密码认证

如果你跟我一样nginx前面还加了一层负载均衡,可以尝试去掉负载均衡,直接调用文件服务器
在这里插入图片描述

总结

文件服务器上传大文件失败不一定是后端nginx的限制了文件大小的原因,这次主要的原因是401 authorization required,以后先看日志,再思考排查方向。嗨害嗨。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值