Nginx oraz GeoIP
![Nginx oraz GeoIP](/content/images/size/w2000/wordpress/Nginx-1-4-3-HTTP-Proxy-Server-Released-with-Lots-of-Fixes.png)
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