GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak používat GeoIP s Nginx na Ubuntu 16.04

Tento tutoriál vysvětluje, jak používat modul GeoIP s nginx na Ubuntu 16.04, abyste zjistili, odkud vaši návštěvníci pocházejí. Modul GeoIP nastavuje několik proměnných jako $geoip_country_name, $geoip_country_code, $geoip_city atd., které můžete použít ve svých skriptech PHP nebo přímo v konfiguraci nginx, například k poskytování obsahu v různých jazycích podle země uživatele.

1 předběžná poznámka

Zde používám web www.example.com s kořenem dokumentu /var/www/www.example.com/web/ a konfiguračním souborem Nginx vhost /etc/nginx/sites-enabled/www.example.com. vhost. Tento návod použiji pro základní nastavení Ubuntu-Nginx. https://www.howtoforge.com/tutorial/installing-nginx-with-php7-fpm-and-mysql-on-ubuntu-16.04-lts-lemp/

Tento návod je také kompatibilní s nastavením ISPConfig nginx.

Poznámka pro uživatele Ubuntu:

Protože musíme všechny kroky z tohoto tutoriálu spustit s právy root, můžeme buď před všechny příkazy v tomto tutoriálu přidat řetězec sudo, nebo se staneme rootem hned teď zadáním

sudo -s

2 Zjistěte, zda Nginx podporuje GeoIP

Než začneme, musíme zjistit, zda je modul GeoIP zabudován do našeho serveru nginx:

nginx -V
[chráněno e-mailem]:~# nginx -V
verze nginx:nginx/1.10.0 (Ubuntu)
vytvořeno s OpenSSL 1.0.2g-fips 1. března 2016
Podpora TLS SNI povoleno
konfigurovat argumenty:--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with- ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/ nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/ lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/ lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path =/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with- http_addition_module --with-http_dav _module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module mail --with-mail_ssl_module --with-threads

3 Stáhnout databáze GeoIP

Na Debianu a Ubuntu existuje balíček geoip-database, který lze nainstalovat přes apt, ale je trochu zastaralý a obsahuje pouze GeoIP.dat (databáze zemí), nikoli GeoLiteCity.dat (databáze měst). Proto tento balíček neinstalujeme, ale stahujeme nové kopie z webu GeoIP do adresáře /etc/nginx/geoip:

mkdir /etc/nginx/geoip
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

4 Konfigurace Nginx

Nyní nakonfigurujeme nginx. Otevřete /etc/nginx/nginx.conf...

nano /etc/nginx/nginx.conf

... a přidejte direktivy geoip_country a geoip_city do kontejneru http {}:

[...]http {

##
# Základní nastavení
##

geoip_country /etc/nginx/geoip/GeoIP .dat; # databáze IP zemí
geoip_city /etc/nginx/geoip/GeoLiteCity.dat; # databáze IP města[...]

Direktiva geoip_country zpřístupňuje následující proměnné:

  • $geoip_country_code – dvoupísmenný kód země, například RU, USA.
  • $geoip_country_code3 – třípísmenný kód země, například RUS, USA.
  • $geoip_country_name – (úplný) název země, například Ruská federace, Spojené státy atd.

Direktiva geoip_city poskytuje následující proměnné:

  • $geoip_city_country_code – dvoupísmenný kód země, například RU, USA.
  • $geoip_city_country_code3 – třípísmenný kód země, například RUS, USA.
  • $geoip_city_country_name – název země, například Ruská federace, Spojené státy – pokud je k dispozici.
  • $geoip_region – název regionu (provincie, region, stát, provincie, federální země a podobně), například Moskva City, DC – je-li k dispozici.
  • $geoip_city – název města, například Moskva, Washington, Lisabon atd. – pokud je k dispozici.
  • $geoip_postal_code – PSČ nebo poštovní směrovací číslo – je-li k dispozici.
  • $geoip_city_continent_code – pokud je k dispozici.
  • $geoip_latitude – zeměpisná šířka – pokud je k dispozici.
  • $geoip_longitude – zeměpisná délka – pokud je k dispozici.

Abychom tyto proměnné zpřístupnili i vašim PHP skriptům, musíme nastavit několik direktiv fastcgi_param. Nejlepší je to udělat v souboru /etc/nginx/fastcgi_params, kde jsou ostatní direktivy fastcgi_param:

nano /etc/nginx/fastcgi_params
 [...] ### SET GeoIP proměnných ### 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_itude;fastcgi_param $_ipgeoIP_LAIPTI_long_lg $_ipgeoIP_LAIPTI_long GEOIP;ip_LAIPTI_long GEOIP; 

(Ujistěte se, že řádek obsahuje /etc/nginx/fastcgi_params; ve vaší lokalitě ~ \.php$ {} kontejner v konfiguraci vhost, protože jinak je výše uvedená konfigurace pro váš vhost k ničemu.)

Pokud používáte nginx jako reverzní proxy a chcete předávat proměnné GeoIP do backendu, měli byste vytvořit/upravit soubor /etc/nginx/proxy.conf...

nano /etc/nginx/proxy.conf

... a přidejte k němu následující řádky:

 [...] ### SET GeoIP proměnných ### proxy_set_header GEOIP_COUNTRY_CODE $ geoip_country_code; proxy_set_header GEOIP_COUNTRY_CODE3 $ geoip_country_code3; proxy_set_header GEOIP_COUNTRY_NAME $ geoip_country_name; proxy_set_header GEOIP_CITY_COUNTRY_CODE $ geoip_city_country_code; proxy_set_header GEOIP_CITY_COUNTRY_CODE3 $ geoip_city_country_code3; proxy_set_header GEOIP_CITY_COUNTRY_NAME $ geoip_city_country_name; proxy_set_header GEOIP_REGION $ geoip_region;proxy_set_header GEOIP_CITY $geoip_city;proxy_set_header GEOIP_POSTAL_CODE $geoip_postal_code;proxy_set_header GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;proxy_set_header $pregeoIP_LATI_longat $pregeoIP_LA_header GEOIPeroIP_LATI_longset $preip_LATI_longset 

(Ujistěte se, že používáte řádek včetně /etc/nginx/proxy.conf; ve vaší konfiguraci proxy nginx, protože jinak backend nemůže používat proměnné GeoIP.)

Nyní znovu načtěte nginx...

systemctl znovu načtěte nginx.service

... aby se změny projevily.

Restartujte PHP-FPM následovně:

systemctl restart php7.0-fpm.service

5 Krátký test

Abychom zjistili, zda modul GeoIP funguje správně, můžeme vytvořit malý soubor PHP v našem webovém prostoru www.example.com (např. /var/www/www.example.com/web):

nano /var/www/www.example.com/web/geoiptest.php

K proměnným GeoIP můžeme přistupovat následovně:

$geoip_country_code =getenv(GEOIP_COUNTRY_CODE);

Nebo takto:

$geoip_country_code =$_SERVER['GEOIP_COUNTRY_CODE'];
';echo 'country_code3:'.$geoip_country_code3.'
';echo 'country_name:'.$geoip_country_name.'
';echo 'city_country_code:'.$geoip_city_country_code.'
';echo 'city_country_code3:'.$geoip_city_country_code3.'
';echo 'city_country_name:'.$geoip_city_country_name.'
';echo 'region:'.$geoip_region.'
'; echo 'city:'.$geoip_city.'
';echo 'postal_code:'.$geoip_postal_code.'
';echo 'city_continent_code:'.$geoip_city_continent_code.'
';echo 'zeměpisná šířka:'.$geoip_latitude.'
';echo 'longitude:'.$geoip_longitude.'
'; ?>

Zavolejte ten soubor v prohlížeči (http://www.example.com/geoiptest.php) a měli byste vidět GeoIP v práci (ujistěte se, že soubor voláte z veřejné IP adresy, ne z místní) :

Je také možné použít proměnné GeoIP přímo v konfiguraci nginx, např. takto:

nano /etc/nginx/sites-enabled/www.example.com.vhost
[...] umístění / { index index.html index.php; try_files /index_$geoip_country_code.html /index.html; [...]]
systemctl znovu načtěte nginx.service

V tomto příkladu, pokud návštěvník pochází z Německa (kód země:DE) a soubor index_DE.html existuje, bude poskytnut tento soubor, v opačném případě bude poskytnut výchozí soubor index.html.

To lze použít k poskytování obsahu v různých jazycích na základě původu uživatele.

  • nginx:http://nginx.org/
  • nginx Wiki:http://wiki.nginx.org/
  • Ubuntu:http://www.ubuntu.com/


Ubuntu
  1. Jak nainstalovat WordPress s Nginx na Ubuntu 18.04

  2. Jak nainstalovat phpMyAdmin s Nginx na Ubuntu 18.04

  3. Jak zabezpečit Nginx pomocí Letsencrypt na Ubuntu 20.04

  1. Jak nainstalovat MediaWiki s Nginx na Ubuntu 16.04

  2. Jak nainstalovat Grav CMS s Nginx na Ubuntu 16.04

  3. Jak nainstalovat SuiteCRM s Nginx na Ubuntu 16.04

  1. Jak nainstalovat Magento s Nginx na Ubuntu 15.10

  2. Jak nainstalovat Mailpile s Nginx na Ubuntu 15.10

  3. Jak nainstalovat Redmine 3 s Nginx na Ubuntu 15.10