Возможно, дело в том, что Апач выдаёт не просто Keep-alive: timeout=15, max=5 Keep-alive: timeout=15, max=5 Keep-alive: timeout=15, max=5 Keep-alive: timeout=15, max=5
и закрывает соединение после пятого запроса, поэтому бразуер открывает новое. nginx же не ограничивает число запросов по keep-alive соединению, поэтому
всё идёт через изначальные три.
данное утверждение верно. именно так и ведет себя апач.
fd_flags = fcntl(sd, F_GETFL, 0); #if defined(O_NONBLOCK)
fd_flags |= O_NONBLOCK; #elif defined(O_NDELAY) fd_flags |= O_NDELAY; #elif defined(FNDELAY) fd_flags |= FNDELAY; #else #error Please teach APR how to make sockets non-blocking on your platform.
#endif if (fcntl(sd, F_SETFL, fd_flags) == -1) { return errno; } #else int on = 1; if (setsockopt(sd, SOL_SOCKET, SO_NONBLOCK, &on, sizeof(int)) < 0) return errno;
#endif /* BEOS */ return APR_SUCCESS; } ----------------------------------------------------
Итого: есть вполне хорошее и логичное обьяснение сложившейся ситуации. По тестам, время на открытие все той-же странички получается ~0.59s, что
как минимум не хуже чем у апача, при гораздо более приятной масштабируемости.
Игорь, а может быть имеет смысл по умолчанию tcp_nodelay on ?