Nginx oraz GeoIP

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