Spôsob získavania týchto informácií sa nazýva geolokácia. Na tieto účely je, de facto, najpoužívanejším systémom GeoIP od spoločnosti MaxMind. Jadrom GeoIP je obyčajná databáza obsahujúca informácie o tom, v ktorom štáte sa nachádzajú jednotlivé rozsahy IP adries. Možnosť používania geolokácie je podporovaná v mnohých programovacích jazykoch avšak v tomto príspevku sa zameriame na jej použitie na webových stránkach písaných v PHP a postavených na web serveri Apache.
Ako vlastne funguje geolokácia v spojení s Apache? Funkcionalitu sprístupňuje Apache modul s názvom
mod_geoip2
, ktorý umožňuje u prichádzajúcich požiadaviek na stránky zistiť na základe návštevníkovej IP adresy jeho štát, či mesto a podľa toho nastaviť premenné prostredia (na Elbia Hostingu je zatiaľ dostupné iba zisťovanie štátu). Tieto premenné prostredia sú potom štandardným spôsobom dostupné napríklad v PHP skripte alebo v .htaccess
súboroch a na základe nich je možné rozhodovať sa, čo alebo ako zobraziť.Použitie geolokácie
Ukážme si jednoduchý príklad, akým môžete na Elbia Hostingu sprístupniť tieto informácie. Vytvoríme si PHP skript, ktorý bude obsahovať tento fragment kódu:<?php $country = getenv('GEOIP_COUNTRY_NAME'); if ($country == "A1") { echo "Momentálne pristupujete s využitím anonymného proxy.\n"; } else { echo "Momentálne pristupujete zo štátu $country.\n"; } ?>Ako vidieť už z príkladu, zaujímavosťou je, že v premennej
GEOIP_COUNTRY_CODE
môžeme nájsť aj kód A1, ktorý zodpovedá známym adresám anonymných proxy serverov. V tomto zozname nájdete prehľad všetkých možných kódov štátov a iných špeciálnych kódov, na ktoré môžete naraziť.Takýmto spôsobom môžete použiť premenné uvedené nižšie (alebo premenné z úplného zoznamu):
- GEOIP_CONTINENT_CODE – dvojpísmenový kód kontinentu (EU, AS, AF, NA, SA, OC)
- GEOIP_COUNTRY_NAME – anglický názov štátu podľa ISO 3166
- GEOIP_COUNTRY_CODE – dvojpísmenový kód štátu
Pokiaľ by ste chceli určitým návštevníkom celkovo zneprístupniť nejakú časť webu (neprístupné by boli všetky súbory, nielen PHP skripty), môžete využiť
.htaccess
súbor, ktorý cez FTP umiestnite do adresára, na ktorý sa má obmedzenie vzťahovať. Napríklad, ak by sme chceli zakázať prístup návštevníkom z Číny a Ruska, buď si vytvoríme nový .htaccess
súbor alebo do existujúceho pridáme nasledovné direktívy:<IfModule mod_geoip.c> SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry Deny from env=BlockCountry </IfModule>V prípade pokusu o prístup zo zablokovaných lokácií sa návštevníkovi zobrazí chyba 403 Prístup zamietnutý.
O niečo komplikovanejší príklad je, keď by sme chceli na základe lokácie presmerovať návštevníka na jazykovo odlišné verzie súborov. Podobným spôsobom doplníme do
.htaccess
súboru nasledovné:RewriteEngine On RewriteBase / # ak je GEOIP_COUNTRY_CODE nastavene na EN RewriteCond %{ENV:GEOIP_COUNTRY_CODE} EN # a pristupuje sa k htm alebo txt strankam RewriteCond %{REQUEST_URI} .(htm|txt)$ # pridame prefix /en/ RewriteRule ^(.*)$ /en/$0 [L] # obdobne pre CZ RewriteCond %{ENV:GEOIP_COUNTRY_CODE} CZ RewriteCond %{REQUEST_URI} .(htm|txt)$ RewriteRule ^(.*)$ /cz/$0 [L]
Záver
Na záver ešte pár poznámok k používaniu a možnostiam tejto realizácie geolokácie. Takto popísaným spôsobom je možné získať iba informácie o IP adrese, z ktorej príde požiadavka – nie je teda možné zisťovať, napríklad, štát ľubovoľne zvolenej IP adresy. Pokiaľ ide o postupne sa rozširujúce IPv6, pozitívnou správou je, že modulmod_geoip2
podporuje zisťovanie štátu na základe IPv6 adresy, čo môžete využiť aj v našom hostingu. Tiež je ešte potrebné dodať, že niekedy môžu byť takto získané geolokačné údaje nie úplne presné alebo aktuálne; hlavne pokiaľ sa snažíme zistiť polohu veľmi presne. Preto je vhodné používať ich skôr ako užitočné vodítko a nie ako zaručenú informáciu.