BAŞA DÖN

Google maps IP engeline web sunucusu tabanlı reverse proxy çözümü

İncelemek için resmi tıklayınız.

Ocak 2009'da yayına alınan Google Maps altyapısını kullanan "Cumhurbaşkanımız Nerede?" uygulaması Google servislerine ait bazı IP adreslerine mahkeme kararı ile erişim yasağı koyulmasının ardından hizmet veremez hale gelmişti. Aradan geçen bunca zamana rağmen Google tarafından çözüm üretilmemesi üzerine sorunu kendi yöntemlerimiz ile ortadan kaldırmak üzere durumu incelemeye koyulduk.

Google yoğun ziyaretçi trafiğini sunucular arasında dengelemek için çeşitli yöntemlere başvuruyor. Ülkemizden gelen bağlantılarda Google DNS sunucuları engellenmiş olan IP adresini içeren bir çözümleme yapıyor ve sorunda burada başlıyor. Kullanıcıların kendi bilgisayarlarında yapacakları bazı ayarlar ile bu problemi gidermek mümkün. Ziyaretçilere "Cumhurbaşkanımız Nerede?" uygulamasını kullanabilmek için bu ayarları yapmaları gerektiğini söylemek hiç mantıklı olmayacağı gibi birçok kullanıcının üstesinden gelemeyeceği teknik detayları içeren bir konu olmasıda işin cabası. Öyleyse bu işi kullanıcıların yerine uygulama sunucusunun kendisi yapmalıydı "Reverse Proxy" fikri bu gerekçe ile ortaya çıktı.

http://khm.google.com, http://khm1.google.com, http://mt0.google.com, http://mt1.google.com sunucularının IP adreslerindeki engelden dolayı haritaların yüklenemediğini tespit ettik. Öncelikle uygulama sunucusunda DNS çözümleme ayarlarında bazı değişiklikler yaparak bu servislere erişimi engel bulunmayan IP'ler üzerinden yapmasını sağladık böylece sunucu üzerinde Google Maps servisi çalışır hale geldi. Uygulamada kullandığımız "Google Map Javascript API" yi hazırladığımız Reverse Proxy üzerinden çağırdık.

<script type="text/javascript" src="webproxy.ashx?Url=http://maps.google.com/maps/api/js"></script>

webproxy.ashx dosyası "Url" parametresi ile kendisine gönderilen adrese ziyaretçinin gönderdiği bazı temel üstbilgileri ekleyerek sunucu tarafında bir istekte bulunur (http://msdn.microsoft.com/en-us/library/debx8sh9.aspx). Google sunucusundan alınan yanıt "text/javascript" tipinde ise kullanıcıya bu dosya transfer edilmeden (http://msdn.microsoft.com/en-us/library/system.net.webresponse.aspx) önce IP adreslerine erişim engeli bulunan sunucu adreslerine müdahale edilir. Yerleşik String.Replace metodu kullanılarak örneğin "http://khm.google.com/" adresi "webproxy.ashx?Url=http://khm.google.com/" şeklinde değiştirilir. Böylece kullanıcının internet tarayıcısına ulaşan "Google Map Javascript API" dosyasında erişim engeli bulunan diğer sunuculara yapılacak isteklerin "Reverse Proxy" üzerinden geçmesi gerektiği belirtilmiş olur. Ayrıca Google tarafından kullanıcı oturumunu takip etmek için gönderilen çerez bilgileri kullanıcıya özel bir "Session" değişkeninde saklanır (http://msdn.microsoft.com/tr-tr/library/system.net.httpwebrequest.cookiecontainer.aspx) aksi taktirde daha sonra yapılacak bir dizi isteği Google Map sunucusu ilişkilendiremeyerek yanıt vermeyi kesecektir.

O anda ekranda görülen bölgenin harita fotoğrafları "Google Map Javascript API" dosyasında dinamik olarak yaptığımız değişiklik sayesinde "webproxy.ashx?Url=...." adresi üzerinden talep edilir. Yeni hedefi "Url" parametresinden alan "webproxy.ashx" dosyası kullanıcıya özel olarak saklanan çerez bilgilerini ve kullanıcının tarayıcısından gönderilen bazı temel üstbilgileri ekleyerek sunucu tarafında yeni bir istekte bulunur. Google Maps sunucusu tarafından gönderilen içerik tipinin (MIME) "image/png" olduğu teyit edildiği taktirde istemciye aktarılırken sunucu performansı için istemci tarafı önbellekleme komutları eklenir (http://msdn.microsoft.com/en-us/library/system.web.httpresponse.cache(v=VS.90).aspx). Tüm bu işlemler ziyaretçi farketmeden ve kullandığı internet tarayıcısında yada işletim sisteminde hiçbir ayar değiştirmeyi gerekli kılmadan arka planda kendiliğinden gerçekleşmiş olur.

Yeterli teknik ve kodlama bilgisine sahip değilseniz kendi "Reverse Proxy" uygulamanızı baştan yazmak yerine http://www.codeproject.com/KB/IP/reverseproxy.aspx ve http://www.codeproject.com/KB/web-security/HTTPReverseProxy.aspx adresindeki gibi açık kaynak kodlu projelerden yararlanmayı tercih edebilirsiniz. Eğer PHP tabanlı bir sistem kullanıyorsanız http://www.glype.com/ adresindeki açık kaynak kodlu uygulamaya eklenti yazmayı deneyebilirsiniz.


Yorumlar
XDaha önce yorum yapılmamış
Yorum Yapın