Nginx oraz GeoIP

Sam tytuł chyba wiele mówi. Ja chciałem blokować wybrane lokalizacje tak aby były dostępne tylko dla polski.
Zaczynamy od sprawdzenia czy nasz nginx posiada obsługe GeoIP (paczke nginx-extras napewno ma).
# nginx -V
nginx version: nginx/1.6.2
TLS SNI support enabled
configure arguments:
...
--with-http_geoip_module
...
Więc można pobrać goip:
apt-get install geoip-database libgeoip1
oraz wgrać najnowszą wersje pliku z danymi
mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak cd /usr/share/GeoIP/ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz gunzip GeoIP.dat.gz
Dodajemy ustawienia ograniczeń do sekcji http
vim /etc/nginx/nginx.conf
geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default yes; PL no; }
Oczywiście default yes – domyślnie dopuszcza wszystko oraz PL no czyli Polska dostanie coś :), u mnie jest to 500.
Teraz sekcja server
location /katalog { if ($allowed_country = no) { return 500; } }
I to wszystko.
A… przeładowanie konfiguracji :)
/etc/init.d/nginx reload