solrj 客户端请求 nginx 411错误

开始一直使用jboss/jetty 来运行solr服务,一直很正常,今天在前面加了一个nginx,突然间,提交add/update document都没反映了,第一反应是是否服务有问题呢,看solr 服务端日志,发现少了一些日志打印,add部分没有,debug solr服务端跟踪,发现请求过来的document参数为空。然后再看solrj客户端代码,发现每次都需要调两次服务端,一次发送数据,一次提交commit,而每次发送数据的时候都会返回socket broke pipe, 这是想到看看请求是否有到达服务端,debug服务端发现只有一次请求,且是commit参数的那次请求有到达。
这时才想起来,去看nginx,发现这样的报错:

"POST http://xxxxx/solr/core1/update?wt=javabin&version=2" 411 649 "-" "Solr[org.apache.solr.client.solrj.impl.HttpSolrServer] 1.0"


这就很明显了411错,原来是被nginx拦截且报错返回了, 411报错有一下这些原因:

nginx给出的官方解释有三种情况会引发nginx弹411回去
client sent invalid “Content-Length” header
client sent … method without “Content-Length” header
client sent “Transfer-Encoding: chunked” header


且这里有解决方案:
http://wiki.nginx.org/HttpChunkinModule

配置
会绕过nginx ngx_http_process_request_header 方法中对以上三种情况的检查

但是发现我nginx版本不支持HttpChunkinModule,先记着,等我升级了再来确认是否有效。

这边也找到类似的文章:http://artori.us/nginx-411-error/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值