在高并发的服务器上,如果通过 netstat -anp | grep TIME_WAIT命令发现nginx与upstream服务之间存在大量TIME_WAIT状态的连接,那么这很可能是因为nginx配置文件中upstream部分没有正确配置keepalive导致短链接不断关闭,而每一个TIME_WAIT状态的连接需要等待60秒才能关闭(60秒是linux kernel写死的不能配置,这也是为了保证TCP双方能够正确接收数据)。具体配置如下,注意下面的“proxy_http_version 1.1” proxy_set_header Connection "不能少。keepalive 代表每个nginx worker缓存的最大的空闲长链接数,这个数不用设得太大,因为它不会限制能够打开的最大连接数。
upstream http_backend {
server 127.0.0.1:8080;
keepalive 16;
}
server {
...
location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}