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