У меня в подобном мапе получается 500000 строк, размер файла 30Мб.
Каждый процесс nginx'а кушает после загрузки ~80M.
В Апаче mod_vhost_alias использует этот мап в виде внешнего NDBM-файла.
Можно ли оценить эффективность nginx'a в такой позе по сравнению с Апачем?
Контент не полностью статика, часть придется проксировать на Апач.
Эти 80М полностью разделяется между процессами.
Если рабочие процессы не свопятся и в map описаны имена без wildcards,
то для поиска соответсвия требуется всего несколько обращений к памяти.
Если используется wildcards, то число обращений к памяти будет кратно
число частей, например, в *.example.com - две части.
При использовании NDBM скорость может быть существенно меньше, когда
нужно идти на диск. Если же данные находятся в памяти, то возможно,
сопоставимо, но я не знаю, сколько обращений к памяти нужно для поиска
имени.
Wildcards в именах хостов нет.
Если location = / придется проксировать на Апач, то в большинстве случаев,
как мне кажется, на момент отдачи статики из-под этого location, нужные места
NDBM-файла уже будут где-нибудь в кэшах ОС.
Для того, чтобы сходить в кэш ОС, нужно сделать сисколл. Между несколькими
обращениями к памяти и сисколлом разница три порядка, не меньше.
Дело в том, что у меня DirectoryIndex index.html index.htm index.dhtml
index.wml .
Сайты с dhtml и wml встречаются редко, но их сможет обработать только Апач.
Если бы можно было объяснить nginx'у, чтоб index.htm, index.html и autoindex
он показывал сам, а dhtml и wml проксировал на апач, тогда не придется
проксировать location = / на Апач, и можно ожидать существенное ускорение.
Реально это сделать?
location = / {
index index.html index.htm index.dhtml index.wml;
autioindex on;
}
location = /index.html {
root ...
}
location = /index.htm {
root ...
}
location = /index.dhtml {
proxy_pass ...
}
location = /index.wml {
proxy_pass ...
}
nginx будет пробовать указанные индексы, а при отсутствии всех будет
autoindex. Если индекс найден, то делается внутрений редирект, и он
обрабатвается в соответствующем location.
Как оптимально настроить map_hash_*_size для моего случая (из
документации не понял)?
Т.е. тупо увеличивать эти параметры, пока nginx не перестанет ругаться, все
остальное он решит сам? ;)
Да. Если не будет хватать, скажем, пятикратного превышения, то можно
пробовать увеличивать server_names_hash_bucket_size.
Игорь Сысоев
http://sysoev.ru