Я понимаю, что вопрос подымался миллион раз, но тем не менее ;)
nginx - реально крутой веб-сервер - умеет кучу всего, использует всякие нетривиальные сисколы, и т.д. и т.п.
Но отсутствие скриптования (встроенный перл не считаем - сайты на нем никто писать не будет) заставляет пользовать nginx либо для статики, либо для проксирования. И если с отдачей статики вопросов нет - тут nginx действительно вне конкуренции, то с проксированием не все гладно. Несмотря на поддержку разных протоколов, мощные реврайты и разного рода постобработка, nginx в режиме проксирования нормально работает только на низких и средних нагрузках ;(
Создание нового tcp соединения на каждый запрос действительно не представляет особой проблемы, пока поток запросов не сильно высок, а ресурсы, требуемые на генерацию ответа на запрос - значительны. Но если поток запросов очень быстрый, а сами запросы простые и выполняются быстро, то тут оверхед на создание, прием, обслуживание и удаление большого кол-ва соединений играет ключевую роль. А такая ситуация вовсе не редкость - на многих крупных проектах значительная часть скриптов весьма оптимизированны и способны генерить ответы с большой скоростью. Способны были бы, если бы их запрашивали в keep-alive режиме. А так приходится прибегать к горизонтальному масштабированию, увеличивая кол-во серверов, причем добавляемая мощность уже не пропорциональна кол-ву ядер, а приблизительно постоянна и ограничивается кол-вом соединений, способных быть обслуженными операционкой без задержек.
Такие вот дела. Кстати, поздравляю с первой мажорной версией, все надеялся увидеть в 1.0 эту фичу - но не судьба..