Никто не пробовал nginx с более чем 100 "Server {}" под нагрузкой?
Есть две директивы: server_names_hash_threshold и server_names_hash.
Обе директивы работают только на уровне http.
server_names_hash_threshold задаёт минимальное число имён для пары
адрес:порт, при котором используется хэширование. По умолчанию - 50.
Если имён меньше, то делается просто линейный поиск в массиве.
Нужно иметь ввиду ещё такую вещь - можно написать много имён, но
если nginx решит, что на данной паре адрес:порт нет виртуальных серверов,
то имена вообще проверяться не будут. Но для этого нужно задавать
явные адрес и порт. Если в конфигурации есть хотя бы один порт без адреса,
то nginx будет слушать только на *:порт. В принципе, это легко исправить,
чтобы кроме *:порт были и явные адрес:порт, но пока необходимости в
этом не было.
server_names_hash задаёт размер хэша, по умолчанию 1009. Если имён не много,
скажем, 500, то можно поставить что-то вроде 101. Для размера лучше брать
простые числа.
Игорь Сысоев
http://sysoev.ru