mod_geo.c version 2.0
модуль, определяющий географию посетителей
сайта
Download: ftp://ftp.lexa.ru/pub/apache-rus/contrib/
Оглавление
- Copyright
- Назначение
- Установка (Apache 1.x)
- Установка (Apache 2.0)
- Конфигурация
- Замечания
Copyright
Copyright (C) 2000-2005 Alex Tutubalin, lexa@lexa.ru
Допускается распространение и использование в производных
продуктах на условиях аналогичных
Apache License
- должен быть сохранен копирайт автора и ссылка на
http://www.lexa.ru/lexa,
производный продукт не должен называться mod_geo
Модуль включает существенную часть libpatricia, Copyright (c) 1997, 1998, 1999
The Regents of the University of Michigan ("The Regents") and Merit Network,
Inc. All rights reserved.
Описание
Модуль предназначен для определения географии пользователя WWW-сервера
и передачи географии вызываемым скриптам/динамическим страницам в
виде дополнительного аргумента запроса. Это может быть полезно,
если в зависимости от региона формируется разное содержимое
ответной страницы, скажем разная реклама или разные ссылки на
Интернет-магазины (например,американские для US/CA, европейские для
остальных).
Модуль совместим с mod_accel - ответы для каждой страны
кэшируются отдельно т.к. код страны добавляется к видимому
mod_accel URL.
Использовано внутреннее представление в виде Patricia tree, что
допускает наличие в базе данных вложенных адресов:
8.0.0.0/7 US
9.20.0.0/17 GB
9.20.22.0/24 GB.LondonArea.SamiiSever
Скорость работы Patricia tree более чем достаточна - на
аналогичной задаче и таблице в 70 тыс префиксов автор получал
скорость порядка 800 тыс lookups/sec на PIII-600, что на три
порядка больше быстродействия Apache на той же машине.
Скрипты для построения БД по географии в комплект модуля не
входят и будут опубликованы позднее, входящая в комплект таблица
была построена 10.01.2002 по данным БД RIPE/ARIN/APNIC.
Определение географии пользователя происходит дважды:
- Сразу после чтения запроса, при этом код страны помещается в
переменную окружения
IP_GEO , которую можно
использовать в RewriteRule и подобных директивах.
Наличие/отсутствие директив GEOActive/GEOCGIArg
на эту фазу работы не влияет - определение географии
происходит если для данного сервера/виртуального сервера
указана таблица с географической БД.
- На финальной стадии обработки запроса (перед запуском
handler) происходит повторное определение географии
пользователя и дописывание ее в строку аргументов запроса. Эта
стадия имеет место только если она разрешена директивами
GEOActive/GEOCGIArg
Запись географических данных в log-файл
Географическую информацию можно записать в лог добавив поле
%{IP_GEO}e в директиву LogFormat
Установка (Apache 1.x)
Для работы с Apache 1.x предназначен модуль mod_geo.c
При конфигурации Apache к параметрам ./configure нужно добавить
--add-module=/path/to/mod_geo.c:
tar xzvf apache_1.3xxx
tar xzvf mod_geo-1.0.xx.tar.gz
cd apache_1.3xx
./configure --prefix=/usr/local/apache ... --add-module=../mod_geo_1.xx/mod_geo.c other-params
make
make install
Установка (Apache 2.0)
Для работы с Apache 2.0 предназначен модуль mod_geo2.c
Сначала необходимо установить Apache 2.0.x, предположим, мы сделали
это в директорию /usr/local/apache
Для установки модуля mod_geo2 нужно использовать программу apxs:
tar xzvf mod_geo-1.xx.tar.gz
cd mod_geo-1.xx
/usr/local/apach/bin/apxs -i -c -a mod_geo2.c
эта команда скомпилирует модуль (ключ -c), установит его в каталог
Apache (ключ -i) и активирует модуль добавлением команды
LoadModule в httpd.conf (ключ -a)
Конфигурационные директивы
Конфигурационная директива GEOTable может быть указана
только в контексте всего сервера или внутри <VirtualServer>,
остальные (обе :) - где угодно в httpd.conf, а для указания в
.htaccess должно быть разрешено AllowOverride FileInfo .
- GEOTable filename
- Имя файла с географической базой в формате
address/masklen String
14.0.0.0/8,US.UT.SoltLakeCity
15.0.0.0/8 GB
15.203.128.0/18 FR
15.204.96.0/19 FR
...
Длина строки в географическом файле не должна превышать 256
символов, работоспособность при более длинных строках не
гарантируется.
Поле адреса отделяется от строки-описания пробелом или
запятой. В сложных случаях (в самой строке могут быть пробелы
или запятая) рекомендуется использование запятой, она при
разборе данных проверяется первой.
В ответе (переменной окружения и параметре CGI) все пробелы и
табуляции в описательной строке заменяются на символ +,
соответственно использование в описаниях и плюса и пробела нежелательно.
Адреса могут быть вложенными, в этом случае найдется best match
Default: умолчания нет
- GEOActive On/Off
- Включает-выключает добавление кода страны в QUERY_STRING.
Default: On
- GEOCGIArg string
- Имя параметра, который будет содержать код страны. Например
при
GEOCGIArg ipcountry
и клиенте пришедшем из России (RU) в строку запроса будет добавлен
параметр ipcountry=RU, соответственно этот параметр будет
виден CGI-скриптам, динамическим документам и так далее.
Замечания
- При использовании совместно с кэширующим модулем (mod_accel
и так далее) включать работу mod_geo нужно только для тех
документов, которым это реально нужно. В противном случае
аргумент с именем страны будет приписан ко всем URL
(включая картинки), что резко снизит эффективность
кэширования.
- Расход памяти данным модулем сравнительно невелик -
единицы мегабайт под таблицу в 40 тыс записей (размер на
сегодня), при инициализации таблицы один раз в контексте
сервера эти данные разделяются между всеми процессами и общий
расход памяти в расчете на одну копию httpd копеечный.
|