Игорь, есть ли у тебя в планах модуль для определения географии? И как
на бэкенд ты планируешь передавать информацию о стране? В url-е или в
поле заголовка запроса? Хотелось бы и то и то :-) Формат исходных
данных будет как у Тутубалина или как у MaxMind ?
Да, планирую, более того, он уже частично сделан.
Формат такой же, синтаксис несколько отличается. Директива такая:
geo geo0 3 {
include iplist;
10.1.1.1/32 6;
10.1.1.0/24 5;
192.168.0.0/16 9;
127.0.0.0/30 7;
}
Внутри можно делать несколько inсlude'ов и перемежать просто адресами.
Во вложенном файле адреса задаются так же, как и в основной секции:
iplist:
10.1.1.2/32 6;
10.1.1.5/32 6;
Директива geo определяет переменную geo0. Таких переменных может
быть несколько (имена произвольные). После имени переменных указывается
значение по умолчанию. Пока можно использовать только числа.
Переменные можно будет передать бэкенду, писать в лог и использовать
в rewrite примерно так (rewrite тоже на днях был переделан, чтобы
в него можно было добавлять всякие директивы):
if ($geo0) {
rewrite - /internal/forbidden.html last;
}
То есть, если geo0 не ноль, то делать rewrite. if() на первых порах
будет достаточно примитивный, но будет развиваться.
Сейчас раскидал все сайты с виртуальных хостов на отдельные Апачи
спомощью nginx и заметил, что чайлды Апача, которые использует mod_geo
жрут памяти намного больше чем остальные. При этом nginx рядо с ними
вообще несравнивается. 6 его процессов меньше памяти занимают, чем
один Апач! Вот я и подумал, может можно сильно сэкономить память,
пеместив определение географии в nginx. Опять же и патчи для mod_geo
не нужны для работы на бэкенде.
Ну у Апача память в данном случае успешно шариться, но тем не менее,
сравнение с Апачём интересное. Например, я на днях на одной из машин
обнаружил, что top показывает такое:
25072 www 2 -20 3612K 3284K kqread 0 50:04 0.10% 0.10% nginx
25073 www 2 -20 3444K 3116K kqread 0 49:58 0.05% 0.05% nginx
25070 www 2 -20 2908K 2580K RUN 0 49:48 0.05% 0.05% nginx
25071 www 2 -20 3200K 2872K kqread 0 50:18 0.00% 0.00% nginx
25074 www 2 -20 2892K 2564K kqread 0 50:06 0.00% 0.00% nginx
49054 www 2 0 4216K 2552K accept 0 0:59 0.00% 0.00% httpd
48763 www 2 0 4088K 2464K accept 0 0:59 0.00% 0.00% httpd
48297 www 2 0 4144K 2508K accept 0 0:59 0.00% 0.00% httpd
Каждый процесс nginx при этом обслуживает порядка 50-70 соединений,
а Апачи - это просто mod_accel'и.
Игорь Сысоев
http://sysoev.ru