Модуль веб-сервера Apache GeoIP позволяет определить, из какой страны идет запрос к сайту. С помощью этого модуля можно ограничить доступ к сайту из определенной страны.
Для ограничения доступа необходимо добавить директивы в файл .htaccess. Директивы для веб-сервера Apache 2.4+ отличаются от Apache 2.2. В примерах указаны директивы для обеих версий веб-сервера.
Важно:
- Нельзя использовать директивы для веб-сервера Apache 2.4+ и Apache 2.2 одновременно. Это может привести к некорректной работе сайта.
- Нельзя добавлять в файл .htaccess путь к файлу с базой данных GeoIP, например, так: GeoIPDBFile /usr/share/GeoIP/GeoIP.dat Это приведёт к ошибкам 500 на сайте. На тарифах виртуального хостинга база данных GeoIP прописана по умолчанию на уровне системы, указывать соответствующую настройку в .htaccess не нужно.
Разрешения запросов из определенных стран:
Apache 2.2
RewriteEngine on
GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE RU GoodCountry
Order Allow,Deny
Allow from env=GoodCountry
</IfModule>
Где RU обозначение страны из которой будет доступ сайт. Можно указать несколько стран, например:
RewriteEngine on
GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE RU GoodCountry
SetEnvIf GEOIP_COUNTRY_CODE BY GoodCountry
SetEnvIf GEOIP_COUNTRY_CODE KZ GoodCountry
Order Allow,Deny
Allow from env=GoodCountry
</IfModule>
В этом случае сайт будет доступен из России, Белорусии и Казахстана.
Apache 2.4
RewriteEngine on
GeoIPEnable On
SetEnvIf GEOIP_COUNTRY_CODE RU GoodCountry
<RequireAny>
<RequireAll>
Require all denied
</RequireAll>
</RequireAny>
<RequireAny>
<RequireAll>
Require env GoodCountry
Require all granted
</RequireAll>
</RequireAny>
</IfModule>
Список кодов стран предоставлен в Википедии.
Полный список и подробности того, какие директивы доступны для редактирования через файл .htaccess, предоставлены в официальной документации PHP и веб-сервера Apache 2.4: