nginx的upstream里不能支持长连接的排查

最近在对比apache和nginx放jboss前面的性能。发现我配置的nginx 对后端server不能使用长连接去连。具体的就是抓包吧:

tcpdump -i lo port 7002 and ‘tcp[tcpflags] & (tcp-syn|tcp-fin) !=0 ‘ -nn

可以看到每个请求完毕后连接都关闭了。
然后抓包搞一晚上,试过N个版本排查了N久,后恰好看文景同学在线就咨询了一下他。我之前的配置文件是:

  
upstream jboss {  
server 127.0.0.1:7002;  
keepalive 10;  
}  
………….  
proxy_set_header Connection "";  
proxy_http_version 1.1;  
sendfile        on;  
rewrite ^$ /index.html permanent;  
location / {  
index  index.html index.htm;  
proxy_pass http://jboss;  
proxy_set_header Host $http_host;  
proxy_set_header X-Forwarded-By $server_addr:$server_port;  
proxy_set_header X-Forwarded-For $remote_addr;  
proxy_intercept_errors on;  
proxy_connect_timeout 5s;  
proxy_read_timeout 10s;  
proxy_send_timeout 5s;  
proxy_buffer_size 16k;  
proxy_buffers 8 64k;  
proxy_busy_buffers_size 128k;

}  

文景提醒我说proxy_set_header需要配置在一起才行,试过把 proxy_set_header Connection “”;放到location里面后果然就OK了。
当然,也可以把这些都直接放在server段,但是注意不要再在location短去设置httpd头.WIKI上的说明是
proxy_set_header directives issued at higher levels are only inherited when no proxy_set_header directives have been issued at a given level.

http://wiki.nginx.org/HttpProxyModule#proxy_set_header