Tutorial ini menjelaskan cara menggunakan modul GeoIP dengan nginx di Ubuntu 16.04 untuk mengetahui dari mana pengunjung Anda berasal. Modul GeoIP menyetel beberapa variabel seperti $geoip_country_name, $geoip_country_code, $geoip_city, dll. yang dapat Anda gunakan di skrip PHP atau langsung di konfigurasi nginx Anda, misalnya untuk menyajikan konten dalam berbagai bahasa berdasarkan negara pengguna.
1 Catatan Awal
Saya menggunakan situs web www.example.com di sini dengan root dokumen /var/www/www.example.com/web/ dan file konfigurasi Nginx vhost /etc/nginx/sites-enabled/www.example.com. vhost. Saya akan menggunakan tutorial ini untuk pengaturan dasar Ubuntu-Nginx. https://www.howtoforge.com/tutorial/installing-nginx-with-php7-fpm-and-mysql-on-ubuntu-16.04-lts-lemp/
Tutorial ini juga kompatibel dengan pengaturan nginx ISPConfig.
Catatan untuk pengguna Ubuntu:
Karena kita harus menjalankan semua langkah dari tutorial ini dengan hak akses root, kita bisa menambahkan semua perintah dalam tutorial ini dengan string sudo, atau kita menjadi root sekarang dengan mengetik
sudo -s
2 Cari tahu apakah Nginx memiliki dukungan untuk GeoIP
Sebelum kita mulai, kita harus mencari tahu apakah modul GeoIP dibangun ke dalam server nginx kita:
nginx -V
[dilindungi email]:~# nginx -V
versi nginx:nginx/1.10.0 (Ubuntu)
dibuat dengan OpenSSL 1.0.2g-fips 1 Mar 2016
dukungan SNI TLS diaktifkan
konfigurasi argumen:--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 --with- mail --with-mail_ssl_module --with-threads
3 Unduh Database GeoIP
Di Debian dan Ubuntu, ada paket geoip-database yang dapat diinstal melalui apt, tetapi agak ketinggalan jaman dan hanya berisi GeoIP.dat (database negara), bukan GeoLiteCity.dat (database kota). Oleh karena itu kami tidak menginstal paket itu, tetapi mengunduh salinan baru dari situs web GeoIP ke direktori /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 Konfigurasi Nginx
Sekarang kita mengkonfigurasi nginx. Buka /etc/nginx/nginx.conf...
nano /etc/nginx/nginx.conf
... dan tambahkan direktif geoip_country dan geoip_city ke wadah http {}:
[...]http {
##
# Pengaturan Dasar
##
geoip_country /etc/nginx/geoip/GeoIP .dat; # basis data IP negara
geoip_city /etc/nginx/geoip/GeoLiteCity.dat; # basis data IP kota[...]
Arahan geoip_country membuat variabel berikut tersedia:
- $geoip_country_code - kode negara dua huruf, misalnya, RU, AS.
- $geoip_country_code3 - kode negara tiga huruf, misalnya, RUS, AS.
- $geoip_country_name - nama (verbose) negara, misalnya, Federasi Rusia, Amerika Serikat, dll.
Arahan geoip_city menyediakan variabel berikut:
- $geoip_city_country_code - kode negara dua huruf, misalnya, RU, AS.
- $geoip_city_country_code3 - kode negara tiga huruf, misalnya, RUS, AS.
- $geoip_city_country_name - nama negara, misalnya, Federasi Rusia, Amerika Serikat - jika tersedia.
- $geoip_region - nama wilayah (provinsi, wilayah, negara bagian, provinsi, tanah federal, dan sejenisnya), misalnya, Kota Moskow, DC - jika tersedia.
- $geoip_city - nama kota, misalnya Moskow, Washington, Lisbon, dll. - jika tersedia.
- $geoip_postal_code - kode pos atau kode pos - jika tersedia.
- $geoip_city_continent_code - jika tersedia.
- $geoip_latitude - lintang - jika tersedia.
- $geoip_longitude - bujur - jika tersedia.
Untuk membuat variabel-variabel ini tersedia untuk skrip PHP Anda juga, kita harus menetapkan beberapa direktif fastcgi_param. Cara terbaik adalah melakukan ini di file /etc/nginx/fastcgi_params di mana direktif fastcgi_param lainnya adalah:
nano /etc/nginx/fastcgi_params
[...] ### SET GeoIP Variabel ### 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_LEOIP_LATITUDE $geolongitude (Pastikan Anda memiliki baris include /etc/nginx/fastcgi_params; di lokasi Anda ~ \.php$ {} container dalam konfigurasi vhost Anda, karena jika tidak, konfigurasi di atas tidak berguna untuk vhost Anda.)Jika Anda menggunakan nginx sebagai proxy terbalik dan ingin meneruskan variabel GeoIP ke backend, Anda harus membuat/mengedit file /etc/nginx/proxy.conf...
nano /etc/nginx/proxy.conf... dan tambahkan baris berikut ke dalamnya:
[...] ### SET GeoIP Variabel ### 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 GEOIP_LAT_titude(Pastikan Anda menggunakan baris include /etc/nginx/proxy.conf; dalam konfigurasi proxy nginx Anda karena jika tidak, backend tidak dapat menggunakan variabel GeoIP.)
Sekarang muat ulang nginx...
systemctl reload nginx.service... agar perubahan diterapkan.
Mulai ulang PHP-FPM sebagai berikut:
systemctl restart php7.0-fpm.service
5 Tes Singkat
Untuk melihat apakah modul GeoIP berfungsi dengan benar, kita dapat membuat file PHP kecil di ruang web www.example.com (mis. /var/www/www.example.com/web):
nano /var/www/www.example.com/web/geoiptest.phpKita dapat mengakses variabel GeoIP sebagai berikut:
$geoip_country_code =getenv(GEOIP_COUNTRY_CODE);Atau seperti ini:
$geoip_country_code =$_SERVER['GEOIP_COUNTRY_CODE'];';echo 'country_code3:'.$geoip_country_code3.'
';echo 'country_name:'.$geoip_country_name.'
';echo 'city_country_code:'.$country_code_city'
';echo 'city_country_code3:'.$geoip_city_country_code3.'
';echo 'city_country_name:'.$geoip_city_country_name.'
';echo 'region:'.$geoip_region.'
'; echo 'kota:'.$geoip_city.'
';echo 'kode_pos:'.$geoip_postal_code.'
';echo 'city_continent_code:'.$geoip_city_continent_code.'
';echo 'latitude:'.$geoip_latitude.'
';echo 'longitude:'.$geoip_longitude.'
'; ?>Panggil file itu di browser (http://www.example.com/geoiptest.php), dan Anda akan melihat GeoIP bekerja (pastikan Anda memanggil file dari alamat IP publik, bukan alamat lokal) :
Dimungkinkan juga untuk menggunakan variabel GeoIP secara langsung dalam konfigurasi nginx, mis. sebagai berikut:
nano /etc/nginx/sites-enabled/www.example.com.vhost[...] lokasi / { index index.html index.php; try_files /index_$geoip_country_code.html /index.html; }[...]systemctl reload nginx.serviceDalam contoh ini, jika pengunjung berasal dari Jerman (kode negara:DE), dan file index_DE.html ada, maka file ini akan disajikan, jika tidak, file index.html default akan disajikan.
Ini dapat digunakan untuk menyajikan konten dalam berbagai bahasa, berdasarkan asal pengguna.
6 Tautan
- nginx:http://nginx.org/
- nginx Wiki:http://wiki.nginx.org/
- Ubuntu:http://www.ubuntu.com/