FreeBSD

Apache — mod_geoip

В данной статье будет вестись рассказ о настройке модуля mod_geoip для веб-сервера Apache. Данный модуль позволяет определить географическое положение подключившегося к серверу клиента по IP адресу. Зачем это нужно? Ответ прост — появляется возможность фильтрации клиентов по странам или автоматом направлять клиента на нужную часть сайта. К примеру, на данном сайте используется модуль, который сохраняет информацию о посетителях, оставивших комментарий (геоположение, ОС, браузер).
Вот информацию о геоположении как раз предоставляет модуль mod_geoip.

На момент написания статьи в портах доступна версия mod_geoip 1.2.8. Ставим модуль.

  1. # cd /usr/ports/www/mod_geoip2
  2. # make install clean

После установки модуля необходимо проверить включен ли он, для этого нужно посмотреть в главном конфигурационном файле Apache присутствует ли строчка:

  1. LoadModule geoip_module       libexec/apache22/mod_geoip.so

Для настройки модуля доступны следующие директивы:

  • GeoIPEnable bool — включить/отключить модуль. Включить/отключить модуль можно в любом месте конфигурационного файла, даже в .htaccess. Возможные значения On или Off.
  • GeoIPDBFile dbpath [flag] — путь к файлу с базой данных о географической информации. По умолчанию файл находится здесь: /usr/local/share/GeoIP/GeoIP.dat. Опциональное поле flag позволяет установить дополнительные режимы работы с базой данных (на данный момент модуль не позволяет комбинировать опции):
    • Standard — не использовать кеширование, таким образом используется меньше памяти. Является значением по молчанию.
    • MemoryCache — кешировать данные в памяти, влечет за собой большее потребление памяти. Рекомендуется использовать с небольшими базами днных.
    • MMapCache — делает тоже самое, что и MemoryCache, только для загрузки в память базы данных используется системный вызов mmap.
    • CheckCache — заставляет модуль проверять базу данных на предмет изменения (обновления). Если база данных была изменена, то модуль перезагрузит ее. Если опция не используется, то при изменении базы данных необходимо перезагружать Apache.
    • IndexCache — частичное кеширование данных из базы данных, то есть будут кешироваться данные, к которым были обращения. Рекомендуется использовать с большими базами данных.
  • GeoIPEnableUTF8 bool — предоставлять информацию о геоположении в кодировке UTF-8 вместо ISO-8859-1. Возможные значения On или Off.
  • GeoIPOutput param — параметр определяет, куда помещать информацию о геположении. Возможные значения:
    • Notes — только в таблицу уведомлений Apache (например, доступ из PHP можно осуществить через функцию apache_note).
    • Env — только в переменные окружения. Полный список переменных, которые добавляет модуль, есть на официальном сайте (ссылка на него в конце статьи).
    • All — комбинация Notes и Env. Является значением по умолчанию.
  • GeoIPScanProxyHeaders bool — проверять запрос на наличие заголовков (заголовки указаны в порядке проверки их модулем) HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR, X-Forwarded-For, HTTP_REMOTE_ADDR. Если такие присутствуют, то использовать IP адрес из них для определения местоположения. Возможные значения On или Off.
  • GeoIPUseLastXForwardedForIP bool — используется, если включен параметр GeoIPScanProxyHeaders. В заголовках (указанных выше), может быть указан не один IP адрес, а список IP адресов. Если такой присутствует, то по умолчанию используется первый IP адрес. С включением данного параметра будет использоваться последний IP адрес из списка. Возможные значения On или Off.

Не полный список переменных, которые добавляет модуль в переменные окружения и в таблицу уведомлений Apache:

  • GEOIP_ADDR — IP адрес, который использовался для поиска в базе данных.
  • GEOIP_CONTINENT_CODE — 2-х буквенный код континента, к которой принадлежит IP адрес (пример, EU для Европы).
  • GEOIP_COUNTRY_CODE — 2-х буквенных код страны (например, RU для России)
  • GEOIP_COUNTRY_NAME — полное название страны (например, Russian Federation для России)

Пример конфигурации модуля:

    <ifmodule geoip_module>
      GeoIPEnable Off
      GeoIPDBFIle /usr/local/share/GeoIP/GeoIP.dat Standard
      GeoIPEnableUTF8 Off
      GeoIPOutput Env
      GeoIPScanProxyHeaders On
      GeoIPUseLastXForwardedForIP On
    </ifmodule>

Модуль достаточно сконфигурировать глобально, а потом подключать его в нужных виртуальных хостах, например, таким образом:

    <virtualhost *:80>
    <ifmodule geoip_module>
      GeoIPEnable On
      <filesmatch ".(gif|jpe?g|png|ico|bmp|css|xml|pdf|rar|jar|js|doc|docx|html|xhtml)$">
        GeoIPEnable Off
      </filesmatch>
    </ifmodule>
    </virtualhost>

При желании там же можно изменить и другие параметры. Как говорилось ранее с помощью информации от модуля можно ограничивать доступ по странам, например для какого-нибудь виртуального хоста можно сделать:

    <ifmodule geoip_module>
      GeoIPEnable On
    </ifmodule><ifmodule setenvif_module>
      SetEnvIf GEOIP_COUNTRY_CODE RU AllowCountry
    </ifmodule>
      <directory /path/to/www>
        Deny from all
        Allow from env=AllowCountry
      </directory>

Таким образом, доступ к сайту будет только у жителей РФ. На официальном сайте можно скачать дополнительные базы (например, чтобы, отображался еще и город).

Насколько полезным был этот пост?

Нажмите на звезду, чтобы оценить!

Средний рейтинг / 5. Голосов:

Пока оценок нет! Будьте первым, поставь свою оценку этому посту.

Мы сожалеем, что этот пост не был полезен для вас!

Давайте улучшим этот пост!

Теги

Оставить комментарий

avatar

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о
Back to top button
Close
Close