A kaydını değiştirdiniz, DNS paneli de kaydedildi, ama site hâlâ eski IP üzerinden açılıyor. Ya da daha kötüsü: mobilden açılıyor, laptoptan açılmıyor. Bu durum neredeyse her zaman tek bir anlama gelir; tarayıcınız ile authoritative sunucu arasında bir yerde DNS yanıtının eski bir kopyası oturuyor ve TTL süresi henüz dolmamış. Sorun şu ki "bir yer" birkaç katmana sahip ve her katman kendi aracıyla temizlenir.
Önce hangi katmanın eski yanıt verdiğini anlayın
Herhangi bir temizlik yapmadan önce yanıtın nereden geldiğini anlamalısınız. Bunu elemezseniz sadece tahmin ediyorsunuz demektir ve sorun ISP çözümleyicisindeyken saatlerce tarayıcı önbelleğini temizliyor olabilirsiniz.
Ana araç dig'dir. Şunu çalıştırın:
dig +short example.com A
dig @1.1.1.1 +short example.com A
dig @8.8.8.8 +short example.com A
İlk satır sisteminizin varsayılan çözümleyicisine sorar. Sonraki iki satır doğrudan Cloudflare ve Google'a sorar. Eğer ilk satırın yanıtı diğer iki satırdan farklıysa, yerel önbelleğiniz veya ISP çözümleyiciniz kirli demektir. Eğer üçü de aynıysa ama tarayıcı farklı bir şey gösteriyorsa, sorun işletim sisteminin veya tarayıcının kendisindedir.
Kalan TTL'yi görmek için +short'u kaldırın:
dig example.com A | grep -A1 "ANSWER SECTION"
Kaydın yanında gördüğünüz sayı, önbelleğin sona ermesine kalan saniye sayısıdır. Eğer 3600 görüyorsanız ve kaydınızın TTL'i 3600 idiyse, bu tam şimdi önbelleğe alındığı ve beklemeniz gerektiği anlamına gelir. Eğer sayı küçük ve azalıyorsa, önbellek sona ermek üzeredir.
Birinci katman: tarayıcı önbelleği
Tarayıcıların kendi DNS önbellekleri vardır ve işletim sisteminden bağımsız çalışırlar. Hem Chrome hem Firefox bu önbelleği tutar ve normalde sekme kapatmakla temizlenmez.
Chrome'da chrome://net-internals/#dns adresine gidin ve "Clear host cache" düğmesine basın. Firefox'ta about:networking#dns ve Clear DNS Cache düğmesi. Edge kullanıyorsanız, aynı Chrome adresi edge:// önekiyle çalışır.
Çoğu kişinin bilmediği bir nokta: Incognito modunun ayrı bir DNS önbelleği yoktur ve aynı sistem önbelleğini kullanır. Yani gizli pencerede temiz bir test yaptığınızı düşünüyorsanız, yanılıyorsunuz.
İkinci katman: işletim sistemi önbelleği
Her işletim sisteminin, yanıtları tüm uygulamalar için önbelleğe alan yerel bir çözümleyicisi vardır. Bu katman genellikle "mobilden açılıyor ama laptoptan açılmıyor" durumunu açıklar.
| İşletim Sistemi | Temizleme Komutu |
|---|---|
| Windows | ipconfig /flushdns |
| macOS (Big Sur ve sonrası) | sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder |
| systemd-resolved kullanan Linux | sudo resolvectl flush-caches |
| nscd kullanan Linux | sudo systemctl restart nscd |
macOS'ta sürümünüz Big Sur'dan eskiyse komut farklıdır ve yalnızca sudo killall -HUP mDNSResponder çalıştırmalısınız. Linux'ta da resolvectl'niz yoksa, muhtemelen systemd-resolved kurulu değildir ve nscd'ye yönelmelisiniz. systemctl status systemd-resolved ile hangisinin sistemde etkin olduğundan emin olabilirsiniz.
Windows'ta ipconfig /flushdns sonrasında hâlâ eski yanıt alıyorsanız, bir adım daha var: ipconfig /release ve ardından ipconfig /renew. Bu işlem DHCP kirasını da yeniler ve DNS sunucusu DHCP'den geldiyse yeni bir değer alabilir.
Üçüncü katman: ISP çözümleyicisi
En çok kafa karışıklığının yaşandığı yer burasıdır. ISP çözümleyiciniz (veya kurumsal ağın iç çözümleyicisi) yanıtları kendi TTL'i ile önbelleğe alır ve bunun üzerinde hiçbir kontrolünüz yoktur. Arayıp "önbelleğinizi temizleyin" diyemezsiniz; genellikle böyle bir imkân yoktur.
Pratik çözüm, geçici olarak ISP çözümleyicisini atlamaktır. Şu ikisinden birini deneyin:
dig @9.9.9.9 +short example.com A
dig @1.1.1.1 +short example.com A
Eğer doğru yanıt bunlardan geliyor ama varsayılan çözümleyiciden gelmiyorsa, sorun kesinlikle o katmandadır. Tarayıcıda gerçek bir test için sistem DNS'ini geçici olarak 1.1.1.1 yapın ve doğruladıktan sonra geri alın. Ya da yalnızca bir uygulamanın başka bir DNS kullanmasını istiyorsanız, Linux'ta systemd-resolved ile belirli bir alan adı için belirli bir sunucu tanımlayabilirsiniz.
Burada hata yapılıyor: çoğu kişi kaydı değiştirdikten sonra hemen TTL'i 300 saniyeye ayarlar ve sorunun çözüldüğünü düşünür. Ancak yeni TTL yalnızca sonraki yanıtlar için geçerlidir; şu anda ISP çözümleyicisinin önbelleğinde eski 86400 TTL'i ile oturan kayıt, o sürenin sonuna kadar kalır. Belirtisi de şudur: saatler sonra bile kullanıcıların bir kısmı eski siteyi, bir kısmı yeni siteyi görür. Yarın taşıma yapacağınızı biliyorsanız, TTL'i taşıma gününde değil, bir gün önce düşürün.
Dördüncü katman: genel çözümleyiciler
Google, Cloudflare ve Quad9'un da önbellekleri vardır, ancak davranışları ISP'den farklıdır. Bunlar genellikle kaydınızın TTL'ine saygı gösterir ve TTL'i kısaltmışsanız hızlıca tazelenirler. Asıl sorun şu ki birçok kullanıcı bu çözümleyicileri kullanır ve kaydınız onların önbelleğinde eski değerle oturuyorsa, trafiğinizin önemli bir kısmı hâlâ eski sunucuya gider.
İyi haber şu ki bu katmanı test edip emin olabilirsiniz. Eğer dig @8.8.8.8 doğru yanıt veriyorsa, Google tazelenmiş demektir ve diğer kullanıcılar da yakında tazelenecektir. Aksi hâlde yalnızca beklemek gerekir.
Sorun gerçekten DNS olmadığında
Bazen tüm bu katmanları temizlersiniz ve site hâlâ eski hâliyle açılır. Bu durumda, hakkında daha az düşünülen iki olasılık kalır.
Birincisi, sunucu tarafı önbelleği. CDN veya ters proxy kullanıyorsanız, o katman da sayfanın eski sürümünü tutar ve bunun DNS ile ilgisi yoktur. İkincisi, uygulama önbelleği. WordPress üzerinde çalışıyorsanız ve bir önbellek eklentiniz varsa, eski sayfa eklentinizin kendi önbelleğinden sunuluyor olabilir. Bu durumlar için WordPress eklenti denetimi, hangi eklentinin önbellekten sorumlu olduğunu ve gerçekten gerekli olup olmadığını anlamanıza yardımcı olur.
Bu iki durumu ayırt etmenin hızlı bir yolu: curl -I https://example.com ile başlıklara bakın. Eğer X-Cache: HIT veya benzerini görüyorsanız, sorun DNS değildir ve uygulama katmanı önbelleğini temizlemeniz gerekir. Eğer başlıklar taze ama tarayıcı farklı bir şey gösteriyorsa, birinci ve ikinci katmana geri dönün.
Her değişiklikten sonra doğru test yöntemi
Sıralama önemlidir. Bu sıralamaya uymazsanız, aynı katmanı birkaç kez temizleyip sonuç alamayabilirsiniz.
- Önce
dig @1.1.1.1ile kaydın authoritative sunucuda doğru olduğundan emin olun. Eğer burada yanlışsa, hiçbir temizlik işe yaramaz. - Sonra işletim sistemi önbelleğini temizleyin ve tekrar
digçalıştırın. - Ardından tarayıcı önbelleğini temizleyin ve yeni bir sekmede test edin.
- En sonunda hâlâ sorun varsa, ISP çözümleyicisini atlamak için sistem DNS'ini geçici olarak değiştirin.
Daha hızlı kontrol için, DNS testi ve sunucu yanıtını incelemek üzere ServerNet'in ücretsiz araçlarını kullanabilirsiniz; bunlar birkaç farklı coğrafi noktadan bakar ve çözümleyiciler arasındaki farkı daha iyi gösterir.
Bir diğer pratik nokta: kendi sunucunuzda çalışıyorsanız ve sunucunun ne gördüğünü görmek istiyorsanız, sunucunun içinden dig çalıştırın. Sunucunuz bir Linux hosting üzerindeyse, bu birkaç saniyelik test yanıt verir ve çoğu zaman sorunun aslında sizin tarafınızda olmadığını gösterir.
Ne zaman beklemek en doğru şeydir
Eğer kaydınızın TTL'i 86400 saniye (bir gün) idiyse ve şimdi değiştirdiyseniz, dünyadaki hiçbir komut ISP çözümleyicisinin önbelleğini zamanından önce temizleyemez. Bu durumda beklemek tek yoldur ve başka her şey zaman kaybıdır. Tek istisna, kullanıcıların DNS'ini geçici olarak başka bir çözümleyiciye yönlendirebilmenizdir ki bu genel bir site için pratikte mümkün değildir.
Ana ders şudur: TTL'i taşımadan önce düşürün, sonra değil. Bu tek şeyi yaparsanız, DNS önbelleğinin sorunlarının çoğu ortadan kalkar.
Sıkça Sorulan Sorular
DNS kaydını değiştirdikten sonra site neden hâlâ eski hâliyle açılıyor?
Çünkü eski yanıt dört önbellek katmanından birinde kalmıştır: tarayıcı, işletim sistemi, ISP çözümleyicisi veya genel çözümleyici. O eski sürümün TTL'i dolana kadar, o katman aynı yanıtı verir. dig @1.1.1.1 ile hangi katmanın hâlâ eski olduğunu anlayabilirsiniz.
Windows DNS önbelleğini nasıl temizlerim?
Command Prompt'ta Yönetici olarak ipconfig /flushdns komutunu çalıştırın. İşe yaramazsa, ipconfig /release ve ardından ipconfig /renew komutlarını da deneyin. Bunun yalnızca işletim sistemi önbelleğini temizlediğini, ne tarayıcı önbelleğini ne de ISP çözümleyici önbelleğini temizlemediğini unutmayın.
Tarayıcının gizli modu DNS önbelleğini atlar mı?
Hayır. Incognito modunun ayrı bir DNS önbelleği yoktur ve aynı işletim sistemi önbelleğini kullanır. Temiz bir test yapmak istiyorsanız, sistem önbelleğini temizlemeli veya farklı bir çözümleyiciye sahip başka bir ağdan test yapmalısınız.
Taşımanın kolay olması için TTL'i kaça ayarlamalıyım?
Planlı bir taşımanız varsa, en az bir gün önce TTL'i 300 saniyeye düşürün ve taşıma sonrası doğruladıktan sonra tekrar önceki değere döndürün. TTL'i taşıma gününde düşürürseniz, çözümleyicilerin önbelleğinde uzun TTL ile oturan eski kayıt o sürenin sonuna kadar kalır ve yapılabilecek bir şey yoktur.
Yorumlar 0
Henüz yorum yok — ilk siz olun!