Nginx çok gelişmiş bir web server’ dır. Bu yazımızda Nginx’ in Split Clients modülü sayesinde A/B Testing gerçekleştireceğiz. A/B Testing’ in ne olduğu konusunda yeterli bilginiz yoksa https://www.optimizely.com/ab-testing/ adresini inceleyebilirsiniz. Gerçekten çok güzel anlatılmış, eğer özet geçmek gerekirse, A/B Testing; Sitenize giren kullanıcıları ayırarak, sitenizin 2 farklı arayüzünü sunmak suretiyle, hangisinin daha çok performans gösterdiğini ölçmektir.

Şöyle örneklendiriyim;

E-ticaret siteniz var ve sitenize giren kullanıcılarınızın yarısına 1. ürün sayfası dizaynını, diğer yarısına da 2.ürün sayfası tasarımını gösteriyorsunuz, ve siparişleri ölçerek, hangi ürün sayfasının daha başarılı olduğunu seçiyorsunuz. Tabi örnekler daha da gelişebilir.

 

“Nginx Split Clients modülü kullanımı”

Split Clients yani kullanıcıları bölme işlemi ip adresi bazlı yapılacak. Nginx kendisine gelen isteklerin ip adreslerini hashleyip  kaydediyor. Bu sayede kontrol edip, kullanıcıları bölebiliyor. Ayrıca kullanıcılar yaptıkları ilk istekte bölündüklerinde, ip adresleri değişene kadar hep aynı grupta kalıyorlar. Bu nedenle kullanıcı ip adresi değişmediği süreci, sayfayı her refreshlediğinde aynı sonuçla karşılaşıyor. Bu da işimizi kolaylaştırıyor.

İşlemler;

  • nginx.conf dosyasınızı açın. Eğerki farklı bir kurulum izlemediyseniz adresi /etc/nginx/nginx.conf
    Dosyayı açtıktan sonra http bloku içine aşağıdaki kodu ekleyin.

    Bu kod sayesinde, web sitemize gelen kullanıcıların %50′ si için $designtest değişkeni “first” olarak geriye kalan yarısı içinde “second” olarak set edilmiş oluyor. Şimdi bu değişkeni kullanıyoruz. Sitenizi tanımladığınız server blokunu açın.

    Burada ufak bir konuyu incelememiz lazım. Benim kullanıcıların yarını 1. diğer yarısını da 2.anasayfaya atmam gerekiyor. Bu yüzden 2 adet index.html yarattım. index-first.html ve index-second.html olarak. Ve aşağıdaki vereceğim kodta bu yönlendirmeyi yapıyor. Siz bu yönlendirme işlemini framework kullanıyorsanız, ona göre değiştirmelisiniz. Örneği index sayfasını değiştirmek yerine query_string atayabilirsiniz.

    sitemizin için tanımladığımız root parametresinin altındaki index parametresini aşağıdaki şekilde değiştiyoruz.

     

  • Sitemizin index.html dosyasınından 2 tane daha yaratıyoruz ve 1.nin adını index-first.html, 2.nin adını index-second.html yapıyoruz
  •  Şimdi sitemize 2-3 farklı ip den girip, olacakları gözlemlemeliyiz. Bunun için sitenize farklı iplerden girip ekran görüntüsü veren https://geopeeker.com adresine girip sitemizin adresini yazıyoruz. İşte benim sonuçlarım aşağıdadır.Screen Shot 2015-09-25 at 02.11.28
  • Gördüğünüz gibi, sunucuya gelen isteklerin neredeyse yarısı index-first.html e, gerisi de index-second.html e düştü. Bu sırada sunucuya gelen başka istekler de olduğunu unutmayın.

“Kullanıcıları Detaylıca İzliyoruz”

Web uygulamalarında kullanıcı loglarını tarayıcı tetikli olarak opsiyonel şekilde tutmanın en geleneksel yolu empty_gif tir. Pek çok reklam ve tracking kodunda rahatlıkla görebilirsiniz. Nginx te default olarak bu directive i destekliyor. Nasıl mı ?

Uygulamamızın arayüzüne logme.gif adında bir gif dosyası ekliyoruz. Bu dosya transprent bir gif dosyası ve doğal olarak ekranda gözükmüyor. Ayrıca nginx destekli olduğu için diskten değil ram’ den geliyor. Lafı uzatmadan kod a geçelim.

  • nginx.conf dosyamızı açıyoruz ve aşağıdaki kodu html blokunun içine ekliyoruz.
  • Yukarıda değişiklik yaptığımız server blokunu tekrardan açıyoruz ve aşağıdaki kodu ekliyoruz
  • index html dosyalarımızı açıyoruz ve hepsine body tagının içinde aşağıdaki kodu ekliyoruz.
  • Şimdi https://geopeeker.com üzerinden sitemize deneme yapıyoruz. Ve işlem sonuçlanınca, servera girip, aşağıdaki komutu çalıştırıyoruz

    Karşımıza aşağıdakine benzer bir çıktı geliyor

    Bakın logları incelediğimizde, hangi ip den hangi tarayıcı ile gelen kullanıcının hangi sayfayı gördüğünü log daki page değerine bakarak izleyebiliyoruz. 4 kişi second sayfasına, 2 kişi de first sayfasına gitmiş. Bu sayede ölçümleme de yapabilmiş olduk.

“Lokasyon Bazlı Yönlendirme Yapın”

Websitemizde kullanıcıları bulundukları lokasyona göre de farklı sayfalara yönlendirmemiz gerekebilir. Bunun için Nginx’ in ngx_http_geoip_module modülünü kullanacağız.

  • Aşağıdaki komutları uygulayarak, ülkelerin iplerini ve ülke kodlarını ediniyoruz.
  • nginx.conf dosyasını açıyoruz ve http blokun içine aşağıdaki kodu ekliyoruz.

     

    Ben sadece işime yarayacak ülkeleri ekledim, siz tamamını http://dev.maxmind.com/geoip/legacy/codes/iso3166/ adresinden inceleyip, aynı formatta ekleyebilirsiniz.

  • Şimdi server bloka giriyoruz ve index dosyamızı aşağıdaki gibi değiştiriyoruz;

    Ve tekrardan https://geopeeker.com/ üzerinden sitemizi tarattığımızda, sonuç bizi mutlu ediyor 🙂

    flag

  • Sitemize giren her kişi, anasayfada ülkesinin bayrağını görüyor 🙂

Yukarıda denediğim örnekleri kendinize göre şekillendirip, kullanabilirsiniz. Ve testler yaparak, en doğruyu bulabilirsiniz. Kolay gelsin.

Leave A Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir