GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So verwenden Sie GeoIP mit Nginx unter Ubuntu 16.04

Dieses Tutorial erklärt, wie Sie das GeoIP-Modul mit nginx auf Ubuntu 16.04 verwenden, um herauszufinden, woher Ihre Besucher kommen. Das GeoIP-Modul setzt mehrere Variablen wie $geoip_country_name, $geoip_country_code, $geoip_city usw., die Sie in Ihren PHP-Skripten oder direkt in Ihrer nginx-Konfiguration verwenden können, um beispielsweise Inhalte je nach Land des Benutzers in verschiedenen Sprachen bereitzustellen.

1 Vorbemerkung

Ich verwende hier die Website www.example.com mit dem Dokumentenstammverzeichnis /var/www/www.example.com/web/ und der Nginx vhost-Konfigurationsdatei /etc/nginx/sites-enabled/www.example.com. vhost. Ich werde dieses Tutorial für die grundlegende Einrichtung von Ubuntu-Nginx verwenden. https://www.howtoforge.com/tutorial/installing-nginx-with-php7-fpm-and-mysql-on-ubuntu-16.04-lts-lemp/

Dieses Tutorial ist auch mit ISPConfig nginx-Setups kompatibel.

Ein Hinweis für Ubuntu-Benutzer:

Da wir alle Schritte aus diesem Tutorial mit Root-Rechten ausführen müssen, können wir entweder allen Befehlen in diesem Tutorial die Zeichenfolge sudo voranstellen oder wir werden sofort root, indem wir

eingeben
sudo -s

2 Finden Sie heraus, ob Nginx GeoIP unterstützt

Bevor wir beginnen, müssen wir herausfinden, ob das GeoIP-Modul in unseren Nginx-Server integriert ist:

nginx -V
[email protected]:~# nginx -V
nginx-Version:nginx/1.10.0 (Ubuntu)
erstellt mit OpenSSL 1.0.2g-fips 1. März 2016
TLS-SNI-Unterstützung aktiviert
Argumente konfigurieren:--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 --mit-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 --with- mail --with-mail_ssl_module --with-threads

3 Laden Sie die GeoIP-Datenbanken herunter

Auf Debian und Ubuntu gibt es das Paket geoip-database, das über apt installiert werden kann, aber etwas veraltet ist und nur GeoIP.dat (Länderdatenbank), nicht GeoLiteCity.dat (Stadtdatenbank) enthält. Daher installieren wir dieses Paket nicht, sondern laden frische Kopien von der GeoIP-Website in das Verzeichnis /etc/nginx/geoip herunter:

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 Nginx konfigurieren

Jetzt konfigurieren wir nginx. Öffnen Sie /etc/nginx/nginx.conf...

nano /etc/nginx/nginx.conf

... und fügen Sie die Anweisungen geoip_country und geoip_city zum Container http {} hinzu:

[...]http {

##
# Grundeinstellungen
##

geoip_country /etc/nginx/geoip/GeoIP .dat; # die Länder-IP-Datenbank
geoip_city /etc/nginx/geoip/GeoLiteCity.dat; # die IP-Datenbank der Stadt[...]

Die Direktive geoip_country stellt folgende Variablen zur Verfügung:

  • $geoip_country_code - Ländercode aus zwei Buchstaben, zum Beispiel RU, US.
  • $geoip_country_code3 - Ländercode aus drei Buchstaben, zum Beispiel RUS, USA.
  • $geoip_country_name – der (ausführliche) Name des Landes, z. B. Russische Föderation, Vereinigte Staaten usw.

Die Direktive geoip_city stellt die folgenden Variablen bereit:

  • $geoip_city_country_code - Ländercode aus zwei Buchstaben, zum Beispiel RU, US.
  • $geoip_city_country_code3 - Ländercode aus drei Buchstaben, zum Beispiel RUS, USA.
  • $geoip_city_country_name – der Name des Landes, z. B. Russische Föderation, USA – falls verfügbar.
  • $geoip_region – der Name der Region (Provinz, Region, Staat, Provinz, Bundesland und dergleichen), z. B. Moskau City, DC – falls verfügbar.
  • $geoip_city – der Name der Stadt, z. B. Moskau, Washington, Lissabon usw. – sofern verfügbar.
  • $geoip_postal_code - Postleitzahl oder Postleitzahl - falls verfügbar.
  • $geoip_city_continent_code - falls verfügbar.
  • $geoip_latitude - Breitengrad - falls verfügbar.
  • $geoip_longitude - Längengrad - falls verfügbar.

Um diese Variablen auch Ihren PHP-Skripten zur Verfügung zu stellen, müssen wir ein paar fastcgi_param-Direktiven setzen. Am besten machst du das in der Datei /etc/nginx/fastcgi_params wo die anderen fastcgi_param Direktiven sind:

nano /etc/nginx/fastcgi_params
 [...] ### SET GeoIP Variablen ### 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;

(Stellen Sie sicher, dass Sie die Zeile include /etc/nginx/fastcgi_params; in your location ~ \.php$ {} container in Ihrer vhost-Konfiguration haben, da die obige Konfiguration sonst für Ihren vhost nutzlos ist.)

Wenn Sie nginx als Reverse-Proxy verwenden und die GeoIP-Variablen an das Backend übergeben möchten, sollten Sie die Datei /etc/nginx/proxy.conf... erstellen/bearbeiten.

nano /etc/nginx/proxy.conf

... und fügen Sie die folgenden Zeilen hinzu:

 [...] ### SET GeoIP Variablen ### 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_postleitzahl;proxy_set_header GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;proxy_set_header GEOIP_LATITUDE $geoip_latitude;proxy_set_header GEOIP_LONGITUDE $geoip_longitude;
 (Stellen Sie sicher, dass Sie die Zeile include /etc/nginx/proxy.conf; in Ihrer nginx-Proxy-Konfiguration verwenden, da das Backend sonst die GeoIP-Variablen nicht verwenden kann.)

Jetzt nginx neu laden...

systemctl reload nginx.service

... damit die Änderungen wirksam werden.

Starten Sie PHP-FPM wie folgt neu:

systemctl startet php7.0-fpm.service neu

5 Ein kurzer Test

Um zu sehen, ob das GeoIP-Modul korrekt funktioniert, können wir eine kleine PHP-Datei in unserem Webspace www.example.com erstellen (z. B. /var/www/www.example.com/web):

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

Wir können wie folgt auf die GeoIP-Variablen zugreifen:

$geoip_country_code =getenv(GEOIP_COUNTRY_CODE);

Oder so:

$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 'Stadt:'.$geoip_city.'
';echo 'Postleitzahl:'.$geoip_Postleitzahl.'
';echo 'city_continent_code:'.$geoip_city_continent_code.'
';echo 'Breitengrad:'.$geoip_latitude.'
';echo 'Längengrad:'.$geoip_longitude.'
'; ?>

Rufen Sie diese Datei in einem Browser auf (http://www.example.com/geoiptest.php), und Sie sollten sehen, dass GeoIP funktioniert (stellen Sie sicher, dass Sie die Datei von einer öffentlichen IP-Adresse aufrufen, nicht von einer lokalen). :

Es ist auch möglich, GeoIP-Variablen direkt in der nginx-Konfiguration zu verwenden, z. wie folgt:

nano /etc/nginx/sites-enabled/www.example.com.vhost
[...] Ort / { index index.html index.php; try_files /index_$geoip_country_code.html /index.html; }[...]
systemctl reload nginx.service

Wenn in diesem Beispiel ein Besucher aus Deutschland (Ländercode:DE) kommt und die Datei index_DE.html existiert, dann wird diese Datei geliefert, andernfalls wird die Standarddatei index.html geliefert.

Dies kann verwendet werden, um Inhalte je nach Herkunft des Benutzers in verschiedenen Sprachen bereitzustellen.

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


Ubuntu
  1. So installieren Sie WordPress mit Nginx unter Ubuntu 18.04

  2. So installieren Sie phpMyAdmin mit Nginx unter Ubuntu 18.04

  3. So installieren Sie MediaWiki mit Nginx unter Ubuntu 16.04

  4. So installieren Sie Grav CMS mit Nginx unter Ubuntu 16.04

  5. So sichern Sie Nginx mit Letsencrypt unter Ubuntu 20.04

So installieren Sie Nginx mit ModSecurity unter Ubuntu 15.04

So installieren Sie TYPO3 7 auf Nginx (LEMP) auf Ubuntu 15.10

So installieren Sie TYPO3 8.1 mit Nginx (LEMP) auf Ubuntu 16.04

So installieren Sie WordPress 5.x mit Nginx auf Ubuntu 18.04 / Ubuntu 16.04

So installieren Sie WordPress mit Nginx auf Ubuntu

So installieren Sie Nextcloud 13 auf Ubuntu 16.04 mit Nginx