Hi,春哥
我们这目前使用nginx(版本1.2.1)作为proxy,上游服务器为tomcat。但在测试中发现一个很奇怪的现象,描述如下:
1. 客户端使用httpclient连续发送多次业务相关请求(测试中发送的是异常用例请求),期望服务器返回json格式字符串,即使出错,业务服务器返回的错误信息也是json格式;
2. nginx作为proxy转发请求,nginx没有特别的配置,除了版本稍低,为1.2.1;
3. tomcat服务器将错误信息包装成json格式返回。
测试中发现,使用同一个httpclient连续发送N次(N >= 3)请求,总会出现异常,异常显示返回错误信息未非json格式,观察nginx的日志,如下
172.31.136.242 - - [27/Sep/2014:22:05:58 +0800] "POST /sdktest-private/token-test?offset=0&complete=true&version=1.0 HTTP/1.1" 403 75 "-" "-" "X" "10.120.151.81:9000" 0.012 1.059 "Apache-HttpClient/4.3.2 (java 1.5)"
172.31.136.242 - - [27/Sep/2014:22:05:59 +0800] "POST /sdktest-private/token-test?offset=0&complete=true&version=1.0 HTTP/1.1" 403 75 "-" "-" "X" "10.120.151.81:9000, 10.120.151.81:9000" -, 0.013 0.952 "Apache-HttpClient/4.3.2 (java 1.5)"
172.31.136.242 - - [27/Sep/2014:22:06:00 +0800] "POST /sdktest-private/token-test?offset=0&complete=true&version=1.0 HTTP/1.1" 400 90 "-" "-" "X" "10.120.151.81:9000, 10.120.151.81:9000" -, 0.001 0.946 "Apache-HttpClient/4.3.2 (java 1.5)"
172.31.136.242 - - [27/Sep/2014:22:06:01 +0800] "POST /sdktest-private/token-test?offset=0&complete=true&version=1.0 HTTP/1.1" 403 75 "-" "-" "X" "10.120.151.81:9000" 0.016 0.953 "Apache-HttpClient/4.3.2 (java 1.5)"
172.31.136.242 - - [27/Sep/2014:22:06:02 +0800] "POST /sdktest-private/newobj?offset=0&complete=true&version=1.0 HTTP/1.1" 400 5 "-" "-" "X" "10.120.151.81:9000" 0.001 0.940 "Apache-HttpClient/4.3.2 (java 1.5)"
问题出在最后请求,转发给了tomcat,但是响应大小为5,这个与期望严重不符,这也是产生问题的导火索。对这个现象感到无比疑惑,但由于对nginx内部机制不是非常熟悉,所
以一时间没有特别好的思路,望春哥指点迷津,不胜感激~
补充说明:
1. 出现异常是使用一个httpclient实例连续穿行发送N次请求,如果只发单条请求,不存在任何问题,httpclient的版本是4.3.2
2. 如果绕过nginx,客户端直接向tomcat发送请求,也不会出错,已重复进行多次实验验证
3. 我们使用的是云主机,不过我想这个应该不存在问题。
4. 如果需要更进一步的补充说明,请春哥指出~