Heroku için Cloudflare DNS yapılandırması ve CNAME flattening

Bir yazılımcı olarak, elbette minimum sunucu konfigurasyonu ile maksimum kodlama yapma eğilimindeyim. Bu yüzden uygulamalarımın deployementını genelde bir paas üzerine yapıyorum. Heroku özellikle Nodejs ve Golang uygulamalarımda kolay deployement yeteneği ile sık başvurduğum bir servis. Ancak önemli bir handikapı var. Heroku’ya CNAME yönlendirmesi yapabiliyorken, A-Record yönlendirmesi yapamıyorsunuz. Çünkü Heroku dyno grid mimarisinin ip blokları sürekli değişiyor. Yani Heroku’nun sabit bir ip’si yok. Bu durumda DNS’de A-Record oluşturamayacaksınız CNAME’e de naked domain de ekleyemeyeceğinizden, naked domaininiz boşta kalacak. Tabi 301 kullanarak yönlendirme yapabilirsiniz ancak ben bu yazıda, Cloudflare kullanarak bu handikapı yönlendirme yapmadan nasıl aşabileceğimizden ve Cloudflare’in ekstra faydalarından bahsedeceğim.

Cloudflare nedir? Nasıl Çalışır?

Öncelikle Wikipedia tanımından yola çıkarsak; Cloudflare ziyaretçi ile sunucu arasında duran, reverse proxy gibi çalışan bir çeşit CDN ve DNS sistemidir.

Açmak gerekirse; Cloudflare, static tüm içeriğinizi, düzenli olarak, dünyanın dört bir yanındaki sunucularında cahce’leyerek, ziyaretçiden gelen isteklere sizin sunucunuza tekrar gitmeden cache’den cevap veriyor. Yani proxy gibi çalışıyor, sizin sunucunuzmuş gibi yapıyor, ama bunu size hiç hissettirmiyor. Bu sırada dinamik içeriğinize de bulaşmıyor.

Bu CDN destekli proxy uygulamasının bir çok faydası var;

  1. Güvenlik: Gelen tüm istekleri filtreden geçirdiğinden ddos vb. ataklardan etkilenmiyorsunuz.
  2. Performans: İstek geldiğinde içeriği isteğe en yakın sunucudan getiriyor, ayrıca cache’lediği tüm datayı sıkıştırarak servis ediyor.
  3. Analytics: Sitenizin tüm trafiği üzerinden geçtiği için gelişmiş bir analytics raporu üretebiliyorlar.
  4. Uygulamalar: Çok küçük konfigrasyonlarla ya da tek tuşla New Relic, Pingdom gibi sayısız uygulamaya entegre olabiliyorsunuz.

1. Heroku yapılandırması

Örnek olarak etkinlikharitam.com alan adını alıyorum. Bu alan adını heroku üzerindeki bir uygulamaya bağlayacağım. İlk yapmamız gereken dashboard üzerinden uygulamanızın ayarlarına girip Domains kısmına bu alan adını eklemeniz.

Bu işlemi Heroku cli ile komut satırı üzerinden de yapabilirdiniz.

$ heroku domains:add etkinlikharitam.com //Adding etkinlikharitam.com to floa... done

Heroku ile işimiz bitti. Normalde bu adımdan sonra alan adı sağlayıcınızda www CNAME kaydı oluşturarak domaininizi bağlayabilirdiniz. Ancak yukarıda anlattığım gibi A-Record oluşturamayacağınızdan, www’siz “etkinlikharitam.com” alan adı boşta kalacaktı.

2. Cloudflare yapılandırması

Üye oldunuz ve “Add Website” diyerek yeni bir websitesi oluşturdunuz. DNS ayarlarını aşağıdaki gibi düzenleyebilirsiniz. Root için ve “www subdomaini” için 2 ayrı CNAME oluşturuyoruz ve uygulamanın Heroku adresine bağlıyoruz.

Peki bu işlemi domain sağlayıcımız üzerinden biz yapamıyorken, Cloudflare nasıl yapıyor?

87'deki DNS Spesifikasyonu nedeniyle çıplak alan adlarını A-Record ile ip eşleştirerek tanımlayabilirsiniz, CNAME ile domain eşleştirebilirsiniz ancak sadece subdomain tanımı yapabilirsiniz. Cloudflare’in bu duruma getirdiği çözüme verdikleri isim CNAME Flattening.

CNAME Flattening şöyle çalışıyor; oluşturduğunuz CNAME zincirinden ip adresini çözümlüyor ve A-Record ile bu ip’yi dinamik olarak eşleştiriyor. Böylelikle Heroku’nun ip’si değişse bile bizim A kaydımız en güncel ip oluyor.

3. Nameserver yapılandırması

Artık bir tek, alan adı sağlayıcınıza gidip (benim örneğimde natro.com) nameserver’larınızı Cloudflare’in size verdiği nameserver’lar ile değiştirmek kaldı.

Nameserverların transferini birkaç saat bekledikten sonra, artık hem www ile hem de çıplak olarak etkinlikharitam.com’a erişebiliyorum.

Gün Sonu

CNAME Flattening, DNS spesifikasyonlarını ihlal ettiği için zaman zaman tartışılan bir konu. Ancak ben network uzmanı değilim, yazılımsal olarak da şimdiye kadar hiçbir sorun yaşamadım. 
 Gördüğünüz gibi sadece bir kaç adımda sitemin güvenlik, CDN, DNS gibi konularına otomatik olarak çözüm üretmiş oldum, ayrıca sitemin performansını gözle görülür biçimde artırdım. Artık yapılandırmaya ayıracağım vakti, asıl zevk aldığım şeye, programlamaya ayırabilirim.

Kolay gelsin.


Originally published at www.eferhatg.com on February 20, 2015.