vellezz.info

Moduł http_geoip_module dla Nginx + php_fpm

Jun
13

Ściągamy bazy danych krajów i miast

cd /etc/nginx/geoip
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz

Rekonfigurujemy Nginx’a

Edytujemy plik /etc/nginix/nginx.conf.
W sekcji http dodajemy poniższe linijki

#GeoIP
geoip_country /etc/nginx/geoip/GeoIP.dat; # the country database
geoip_city /etc/nginx/geoip/GeoLiteCity.dat; # the city database

Następnie deklarujemy zmienne dla php-fpm
Edytujemy plik /etc/nginx/fastcgi_params dodajemy poniższe linijki

### GEOIP Variables ###
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;

fastcgi_param GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
fastcgi_param GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3;
fastcgi_param GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name;
fastcgi_param GEOIP_REGION $geoip_region;
fastcgi_param GEOIP_CITY $geoip_city;
fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code;
fastcgi_param GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;
fastcgi_param GEOIP_LATITUDE $geoip_latitude;
fastcgi_param GEOIP_LONGITUDE $geoip_longitude;

Sprawdzamy konfig

service nginx configtest

Przeładowania nginx’a

service nginx reload

Przydałoby się przetestować nową konfigurację. Tworzymy skrypt PHP np. o poniższej zawartości:

<html><body>
<?php
$keys = preg_filter('/^GEOIP(.*)/', '$0', array_keys( $_SERVER ));

foreach($keys as $key){
    echo $key . ": ". getenv($key)."<br>";
}
?>
</body></html>

Wynik powinien wyglądać tak:

GEOIP_COUNTRY_CODE: PL
GEOIP_COUNTRY_CODE3: POL
GEOIP_COUNTRY_NAME: Poland
GEOIP_CITY_COUNTRY_CODE: PL
GEOIP_CITY_COUNTRY_CODE3: POL
GEOIP_CITY_COUNTRY_NAME: Poland
GEOIP_REGION: xxx
GEOIP_CITY: xxx
GEOIP_POSTAL_CODE: xxx
GEOIP_CITY_CONTINENT_CODE: EU
GEOIP_LATITUDE: xx.xxxx
GEOIP_LONGITUDE: xx.xxxx