Merhaba,

Bu içerik muhtemelen blogumdaki -şimdilik- son içeriğim olacak.
Bu dokümanı hazırlama nedenim, HAProxy-Keepalived High Availability Yapılandırması yazımda bahsettiğim AWS Route53 yapısında olduğu gibi, lokasyona göre en yakın yapıya/sunucuya yönlendirme mantığının temeli içindir. Buradan elde edeceğiniz şehir bilgisiyle (birden fazla lokasyonda aktif-aktif mimari çalıştırıyorsanız) şehire en yakın mimariye yönlendirebilirsiniz.

Bu dokümanın sonunda ulaşacağınız çıktı şöyle olacak:

Eğer NGinx’i sadece proxy olarak kullanacaksanız onun yöntemini de ileride dokümante ederim. Şimdilik nasıl tespit edileceğini not düşüyorum.

GeoIP2Lite kullanacağız. Belki internette görmüşsünüzdür, .dat veri tabanını 2018’den bu yana güncellemiyorlar ve çoğu GeoIP makalesi .dat üzerine. Bu yüzden bu anlatım oldukça günceldir.

Yapmanız gereken pre-install adımlar:

  1. Selinux’u disable edin.
  2. Firewallda 80-443 için uygun kuralı girin.

Öncelikle aşağıdaki rpmleri (OS versiyonunuza göre) yükleyin.

CentOS 6:
yum -y install https://repo.aerisnetwork.com/pub/aeris-release-6.rpm
CentOS 7:
yum -y install https://repo.aerisnetwork.com/pub/aeris-release-7.rpm

Daha sonra NGinx’in latest sürümünü çekebilmek için aşağıdaki repoyu tanımlayın.

nano /etc/yum.repos.d/nginx.repo
Bu dosyanın içine aşağıdaki satırları kopyalayın, sonra yum -y update diyin.

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

Bir sonraki adım olarak da yum install nginx-more diyin.

Daha sonra aşağıdaki komutları sırasıyla uygulayın:

mkdir /usr/share/GeoIP2
wget -P /usr/share/GeoIP2 https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
wget -P /usr/share/GeoIP2 https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
gunzip /usr/share/GeoIP2/*.mmdb.gz
wget -P /usr/share/GeoIP2/ https://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz
tar -zxpf GeoLite2-ASN.tar.gz 

Son işlemden sonra path içinde oluşan klasörün içindeki .mmdb dosyasını /usr/share/GeoIP2 klasörünün içine move edin. (GeoLite2-ASN.mmdb)

Bu işlemleri tamamladıktan sonra /etc/nginx/nginx.conf açın ve http { sonra aşağıdaki alanları yapıştırın.

http {

 ####EXEVOLIUM SPECIAL CONFIG####

 geoip2 /usr/share/GeoIP2/GeoLite2-Country.mmdb {
     auto_reload 60m;
     $geoip2_metadata_country_build metadata build_epoch;
     $geoip2_data_country_code country iso_code;
     $geoip2_data_country_name country names en;
 }
 geoip2 /usr/share/GeoIP2/GeoLite2-City.mmdb {
     auto_reload 60m;
     $geoip2_metadata_city_build metadata build_epoch;
     $geoip2_data_city_name city names en;
 }
 geoip2 /usr/share/GeoIP2/GeoLite2-ASN.mmdb {
     auto_reload 60m;
     $geoip2_data_autonomous_system_number autonomous_system_number;
     $geoip2_data_autonomous_system_organization autonomous_system_organization;
 }

 add_header X-GeoCountry $geoip2_data_country_name;
 add_header X-GeoCode $geoip2_data_country_code;
 add_header X-GeoCity $geoip2_data_city_name;

 ####EXEVOLIUM SPECIAL CONFIG END####

Yukarıdaki işlemi yaptıktan sonra /etc/nginx/fastcgi_param açın ve yapıştırın.

#######EXEVOLIUM CONFIG########

     fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
     fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
     fastcgi_param CITY_NAME    $geoip2_data_city_name;
     fastcgi_param GEOIP2_ASN $geoip2_data_autonomous_system_number;
     fastcgi_param GEOIP2_ASN_ORG $geoip2_data_autonomous_system_organization;
 
#########EXEVOLIUM CONFIG END############ 

NGinx yeniden başlatın ve header kontrol edin. Böyle bir çıktı görmeniz gerekli.

Daha sonra isterseniz php kurup, aşağıdaki kodlardan datayı çektirip ekrana bastırabilirsiniz.

<html>
<body>
<?php

 $geoip2_data_country_code = getenv(COUNTRY_CODE);
 echo 'Ulke_kodu: '.$geoip2_data_country_code.'<br>';

 $geoip2_data_country_name = getenv(COUNTRY_NAME);
 echo 'Ulke_Adi: '.$geoip2_data_country_name.'<br>';

 $geoip2_data_city_name = getenv(CITY_NAME);
 echo 'Sehir_Adi: '.$geoip2_data_city_name.'<br>';

 $remote_addr = getenv(REMOTE_ADDR);
 echo 'IP_Adresi: '.$remote_addr.'<br>';

 $geoip2_data_autonomous_system_number = getenv(GEOIP2_ASN);
 echo 'ISP_ASNumber: AS'.$geoip2_data_autonomous_system_number.'<br>';
 $geoip2_data_autonomous_system_organization_autonomous_system_organization = getenv(GEOIP2_ASN_ORG);
 echo 'ISP_Adi: '.$geoip2_data_autonomous_system_organization_autonomous_system_organization.'<br>'

?>
</body>
</html> 

Umarım zamandan kazanmanızı sağlar.