nginx nodejs 502 upstream prematurely closed connection while reading response header from upstream

问题描述:

在nginx + nodejs的应用场景中,请求URL中如果含有不能进行编码的非法字符则nodejs http server会直接socket hang up断开连接,导致nginx报错"upstream prematurely closed connection while reading response header from upstream", nginx对客户端返回502错误。

测试了Nodejs的两个版本v4.5.0和v8.11.4,都是这种处理方式,且不输出错误日志。作为参照java的tomcat对于这种情况的处理是:返回400错误,同时记录一条错误日志。

示例URL:

如果请求是由前端javascrip脚本发起,则时常会有非法字符出现,如读取客户端mac

http://test.pengpengzhou.com/data?mac=CF-頛摾$▒?&uid=1536675808a106e

解决方案:

在nginx.conf里增加过滤条件,对含有非法字符的请求直接返回400错误,不再转发。

if ( $request_uri ~ [^A-Za-z0-9:\.\/\?@&=\$%,#\+\-_!~\;'\[\]\{\}\^] ) {
  return 400;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值