{"id":1794,"date":"2025-11-13T19:43:06","date_gmt":"2025-11-13T16:43:06","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/kesinti-caninizi-sikmasin-stale-while-revalidate-ve-stale-if-error-nasil-hayat-kurtarir\/"},"modified":"2025-11-13T19:43:06","modified_gmt":"2025-11-13T16:43:06","slug":"kesinti-caninizi-sikmasin-stale-while-revalidate-ve-stale-if-error-nasil-hayat-kurtarir","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/kesinti-caninizi-sikmasin-stale-while-revalidate-ve-stale-if-error-nasil-hayat-kurtarir\/","title":{"rendered":"Kesinti Can\u0131n\u0131z\u0131 S\u0131kmas\u0131n: stale-while-revalidate ve stale-if-error Nas\u0131l Hayat Kurtar\u0131r?"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><p>Hi\u00e7 ba\u015f\u0131n\u0131za geldi mi? Trafi\u011fin \u015fenlendi\u011fi bir ak\u015fam, sitenin tam da kampanya sayfas\u0131 a\u00e7\u0131ld\u0131\u011f\u0131 an, sunucu bir anl\u0131\u011f\u0131na tekler. Telefon \u00e7almaya ba\u015flar, Slack susmaz, izleme panosu k\u0131pk\u0131rm\u0131z\u0131. O s\u0131rada akl\u0131mdan hep \u015fu ge\u00e7er: Ke\u015fke taray\u0131c\u0131ya, \u201cBir dakika sakin ol, bende h\u00e2l\u00e2 g\u00fczel bir kopya var, onu g\u00f6stereyim, arkada tazelemeye \u00e7al\u0131\u015fay\u0131m\u201d diyebilsem. \u0130\u015fte tam bu noktada <strong>stale-while-revalidate<\/strong> ve <strong>stale-if-error<\/strong> devreye giriyor. Basit birka\u00e7 ba\u015fl\u0131k, ama do\u011fru yerde do\u011fru ayarla, o k\u0131sa kesintileri kullan\u0131c\u0131 neredeyse fark etmez hale getiriyor.<\/p>\n<p>Bu yaz\u0131da sizi teknik jargona bo\u011fmadan, ama sahada i\u015finizi g\u00f6recek netlikte bir ak\u0131\u015fla g\u00f6t\u00fcrmek istiyorum. \u00d6nce bu iki sihirli direktifin mant\u0131\u011f\u0131n\u0131 konu\u015faca\u011f\u0131z. Sonra bunu <strong>Nginx<\/strong>\u2019te nas\u0131l hayata ge\u00e7iririz, <strong>Cloudflare<\/strong> taraf\u0131nda neleri ayarlar\u0131z, <strong>WordPress<\/strong> sitelerde hangi k\u00fc\u00e7\u00fck dokunu\u015flarla b\u00fcy\u00fck fark yarat\u0131r\u0131z, ad\u0131m ad\u0131m gidece\u011fiz. Arada ger\u00e7ek hayattan ufak anekdotlar var; o \u00fcnl\u00fc pazar ak\u015fam\u0131 kesintisini nas\u0131l tatl\u0131ya ba\u011flad\u0131\u011f\u0131m\u0131 da anlataca\u011f\u0131m. Hadi ba\u015flayal\u0131m.<\/p>\n<div id=\"toc_container\" class=\"toc_transparent no_bullets\"><p class=\"toc_title\">\u0130&ccedil;indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#stale-while-revalidate_ve_stale-if-error_Nedir_Neden_Umursamaliyiz\"><span class=\"toc_number toc_depth_1\">1<\/span> stale-while-revalidate ve stale-if-error Nedir? Neden Umursamal\u0131y\u0131z?<\/a><ul><li><a href=\"#Bir_dakikalik_sabir_mutlu_kullanici\"><span class=\"toc_number toc_depth_2\">1.1<\/span> Bir dakikal\u0131k sab\u0131r, mutlu kullan\u0131c\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#HTTP_Basliklariyla_Temel_Tarif_Nasil_Yazilir_Nasil_Okunur\"><span class=\"toc_number toc_depth_1\">2<\/span> HTTP Ba\u015fl\u0131klar\u0131yla Temel Tarif: Nas\u0131l Yaz\u0131l\u0131r, Nas\u0131l Okunur?<\/a><ul><li><a href=\"#Bir_dilim_Cache-Control_ustune_iki_kasik_stale\"><span class=\"toc_number toc_depth_2\">2.1<\/span> Bir dilim Cache-Control, \u00fcst\u00fcne iki ka\u015f\u0131k stale<\/a><\/li><\/ul><\/li><li><a href=\"#Nginxte_stale-while-revalidate_ve_stale-if-error_Sahada_Isleyen_Tarif\"><span class=\"toc_number toc_depth_1\">3<\/span> Nginx\u2019te stale-while-revalidate ve stale-if-error: Sahada \u0130\u015fleyen Tarif<\/a><ul><li><a href=\"#Proxy_cache_ve_birkac_kucuk_incelik\"><span class=\"toc_number toc_depth_2\">3.1<\/span> Proxy cache ve birka\u00e7 k\u00fc\u00e7\u00fck incelik<\/a><\/li><\/ul><\/li><li><a href=\"#Cloudflarede_Pratik_Ayarlar_Kenarda_Kalkan_Ortada_Dans\"><span class=\"toc_number toc_depth_1\">4<\/span> Cloudflare\u2019de Pratik Ayarlar: Kenarda Kalkan, Ortada Dans<\/a><ul><li><a href=\"#Edgede_hiz_arka_planda_zarif_tazeleme\"><span class=\"toc_number toc_depth_2\">4.1<\/span> Edge\u2019de h\u0131z, arka planda zarif tazeleme<\/a><\/li><\/ul><\/li><li><a href=\"#WordPresste_Dayanikli_Cache_Eklenti_mi_functionsphp_mi_Sunucu_mu\"><span class=\"toc_number toc_depth_1\">5<\/span> WordPress\u2019te Dayan\u0131kl\u0131 Cache: Eklenti mi, functions.php mi, Sunucu mu?<\/a><ul><li><a href=\"#Basit_ama_etkili_bir_oyun_plani\"><span class=\"toc_number toc_depth_2\">5.1<\/span> Basit ama etkili bir oyun plan\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Gercek_Dunya_Senaryosu_Bakim_Ani_Sicak_Deploy_ve_Eski_Dost_Stale\"><span class=\"toc_number toc_depth_1\">6<\/span> Ger\u00e7ek D\u00fcnya Senaryosu: Bak\u0131m An\u0131, S\u0131cak Deploy ve Eski Dost \u201cStale\u201d<\/a><ul><li><a href=\"#Bes_dakikalik_firtinada_semsiyeyi_acmak\"><span class=\"toc_number toc_depth_2\">6.1<\/span> Be\u015f dakikal\u0131k f\u0131rt\u0131nada \u015femsiyeyi a\u00e7mak<\/a><\/li><\/ul><\/li><li><a href=\"#Dogru_Sureleri_Secmek_Fazla_Bayat_Az_Taze_Dengesini_Kurmak\"><span class=\"toc_number toc_depth_1\">7<\/span> Do\u011fru S\u00fcreleri Se\u00e7mek: Fazla Bayat, Az Taze Dengesini Kurmak<\/a><ul><li><a href=\"#Ne_zaman_kisa_ne_zaman_uzun\"><span class=\"toc_number toc_depth_2\">7.1<\/span> Ne zaman k\u0131sa, ne zaman uzun?<\/a><\/li><\/ul><\/li><li><a href=\"#Gozlem_ve_Sorun_Giderme_Cache_Calisiyor_mu_Diyen_Icin_Kucuk_Arac_Cantasi\"><span class=\"toc_number toc_depth_1\">8<\/span> G\u00f6zlem ve Sorun Giderme: \u201cCache \u00c7al\u0131\u015f\u0131yor mu?\u201d Diyen \u0130\u00e7in K\u00fc\u00e7\u00fck Ara\u00e7 \u00c7antas\u0131<\/a><ul><li><a href=\"#Headerlara_bak_nefes_al_sonra_karar_ver\"><span class=\"toc_number toc_depth_2\">8.1<\/span> Header\u2019lara bak, nefes al, sonra karar ver<\/a><\/li><\/ul><\/li><li><a href=\"#Gelismis_Ipuclari_Ince_Ayarlarla_Tatlandirmak\"><span class=\"toc_number toc_depth_1\">9<\/span> Geli\u015fmi\u015f \u0130pu\u00e7lar\u0131: \u0130nce Ayarlarla Tatland\u0131rmak<\/a><ul><li><a href=\"#Vary_ETag_ve_arkadaslari\"><span class=\"toc_number toc_depth_2\">9.1<\/span> Vary, ETag ve arkada\u015flar\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Sik_Karsilasilan_Hatalar_Neleri_Yapmayalim\"><span class=\"toc_number toc_depth_1\">10<\/span> S\u0131k Kar\u015f\u0131la\u015f\u0131lan Hatalar: Neleri Yapmayal\u0131m?<\/a><ul><li><a href=\"#Her_seyi_cachee_koy_degil_dogru_seyi_dogru_sureyle\"><span class=\"toc_number toc_depth_2\">10.1<\/span> \u201cHer \u015feyi cache\u2019e koy\u201d de\u011fil, \u201cdo\u011fru \u015feyi do\u011fru s\u00fcreyle\u201d<\/a><\/li><\/ul><\/li><li><a href=\"#Kapanis_Kucuk_Bir_Baslik_Buyuk_Bir_Huzur\"><span class=\"toc_number toc_depth_1\">11<\/span> Kapan\u0131\u015f: K\u00fc\u00e7\u00fck Bir Ba\u015fl\u0131k, B\u00fcy\u00fck Bir Huzur<\/a><ul><li><a href=\"#Yolun_sonu_degil_guzel_bir_baslangic\"><span class=\"toc_number toc_depth_2\">11.1<\/span> Yolun sonu de\u011fil, g\u00fczel bir ba\u015flang\u0131\u00e7<\/a><\/li><\/ul><\/li><\/ul><\/div>\n<h2 id=\"section-1\"><span id=\"stale-while-revalidate_ve_stale-if-error_Nedir_Neden_Umursamaliyiz\">stale-while-revalidate ve stale-if-error Nedir? Neden Umursamal\u0131y\u0131z?<\/span><\/h2>\n<h3><span id=\"Bir_dakikalik_sabir_mutlu_kullanici\">Bir dakikal\u0131k sab\u0131r, mutlu kullan\u0131c\u0131<\/span><\/h3>\n<p>\u00d6nbellek dedi\u011fimiz \u015fey, sunucunun \u00fcretti\u011fi sayfan\u0131n bir kopyas\u0131n\u0131 kenarda tutmak demek. Normalde bu kopyan\u0131n bir s\u00fcresi vard\u0131r, biter. Bitti\u011fi an yeni i\u00e7erik istenir. Ama ya o s\u0131rada sunucu me\u015fgulse? Ya veritaban\u0131 biraz gecikiyorsa, ya da a\u011fda minik bir aksilik olduysa? Tam da burada <strong>stale-while-revalidate<\/strong> devreye giriyor: Kopya \u201cresmen\u201d eskimi\u015f olsa bile, taray\u0131c\u0131ya \u201cBu eski i\u00e7eri\u011fi \u015fimdi g\u00f6ster, ben arkada tazeleyece\u011fim\u201d der. Kullan\u0131c\u0131 beklemez, site h\u0131zl\u0131 g\u00f6r\u00fcn\u00fcr. Siz ise arkada yeni i\u00e7eri\u011fi haz\u0131rlars\u0131n\u0131z.<\/p>\n<p><strong>stale-if-error<\/strong> ise farkl\u0131 bir ruh haline hitap eder. Sunucu ger\u00e7ekten hata veriyorsa, yani yeni i\u00e7eri\u011fi getiremiyorsak, \u201cEski ama \u00e7al\u0131\u015f\u0131r sayfay\u0131 g\u00f6ster\u201d der. Bir nevi emniyet yast\u0131\u011f\u0131 gibi d\u00fc\u015f\u00fcn\u00fcn. K\u0131sa bir kesinti, bir deploy\u2019\u0131n ilk saniyelerindeki t\u00f6kezleme, veya beklenmedik bir 502\u2026 Hepsini kullan\u0131c\u0131dan saklamak de\u011fil de, ona p\u00fcr\u00fczs\u00fcz bir deneyim sunmak gibi.<\/p>\n<p>\u0130kisi birden kullan\u0131ld\u0131\u011f\u0131nda b\u00fcy\u00fc tamamlan\u0131r. \u00d6zetle, <strong>stale-while-revalidate<\/strong> h\u0131zl\u0131 hissiyat\u0131, <strong>stale-if-error<\/strong> ise dayan\u0131kl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r. Mesela \u015f\u00f6yle d\u00fc\u015f\u00fcn\u00fcn: Sayfan\u0131n \u00f6mr\u00fcn\u00fc 60 saniye yapt\u0131n\u0131z. Bu 60 saniye doldu, ama arka tarafta yo\u011funluk var. Taray\u0131c\u0131, \u201cEski kopyay\u0131 g\u00f6stereyim, arka planda yenisini isteyeyim\u201d der ve kimse \u201cbekleme\u201d ekran\u0131 g\u00f6rmez. \u0130\u015fler sarpa sararsa, \u201chata alana kadar\u201d eski kopya devreye girer.<\/p>\n<h2 id=\"section-2\"><span id=\"HTTP_Basliklariyla_Temel_Tarif_Nasil_Yazilir_Nasil_Okunur\">HTTP Ba\u015fl\u0131klar\u0131yla Temel Tarif: Nas\u0131l Yaz\u0131l\u0131r, Nas\u0131l Okunur?<\/span><\/h2>\n<h3><span id=\"Bir_dilim_Cache-Control_ustune_iki_kasik_stale\">Bir dilim Cache-Control, \u00fcst\u00fcne iki ka\u015f\u0131k stale<\/span><\/h3>\n<p>Bu i\u015fin kalbi, <strong>Cache-Control<\/strong> ba\u015fl\u0131\u011f\u0131. Taray\u0131c\u0131ya ve aradaki ara katmanlara (CDN, reverse proxy) \u015fu \u015fekilde konu\u015furuz:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">Cache-Control: public, max-age=60, stale-while-revalidate=300, stale-if-error=86400\n<\/code><\/pre>\n<p>Burada 60 saniye boyunca i\u00e7erik taptaze. 60 saniye dolunca, 300 saniye daha eski kopyay\u0131 g\u00f6stermeye izin var ama arka planda yeni kopya istenir. E\u011fer sunucu hata verirse, 1 g\u00fcn boyunca (86400 saniye) eski kopyay\u0131 g\u00f6stermeyi dene diyoruz. Bu de\u011ferler tamamen senaryoya g\u00f6re de\u011fi\u015fir; kritik sayfalarda s\u00fcreler k\u0131sa, statik i\u00e7eriklerde daha uzun tutulabilir.<\/p>\n<p>Bu ba\u015fl\u0131klar\u0131 anlamak i\u00e7in derin teknik bilgi \u015fart de\u011fil. Bir sayfan\u0131n \u201cresmi\u201d \u00f6mr\u00fc ve \u201ceski ama i\u015fe yarar\u201d \u00f6mr\u00fc var gibi d\u00fc\u015f\u00fcnebilirsiniz. \u0130kinci \u00f6m\u00fcr, en \u00e7ok gerekti\u011fi anlarda devreye girer. \u00d6zellikle kampanya sayfalar\u0131nda, blog anasayfas\u0131nda, \u201cpop\u00fcler \u00fcr\u00fcnler\u201d gibi y\u00fcksek trafikli ama \u00e7ok s\u0131k de\u011fi\u015fmeyen b\u00f6l\u00fcmlerde harika sonu\u00e7 verir.<\/p>\n<p>Detay merak edenler i\u00e7in not: Bu davran\u0131\u015flar HTTP standartlar\u0131nda anlat\u0131l\u0131yor. Y\u00f6n g\u00f6sterici olarak <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc5861\" target=\"_blank\" rel=\"noopener nofollow\">RFC 5861\u2019deki stale uzant\u0131lar\u0131<\/a> ve <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Cache-Control\" target=\"_blank\" rel=\"noopener nofollow\">MDN Cache-Control d\u00f6k\u00fcmantasyonu<\/a> \u00e7ok a\u00e7\u0131klay\u0131c\u0131. Ama gelin, laf\u0131 uzatmadan sahaya inelim.<\/p>\n<h2 id=\"section-3\"><span id=\"Nginxte_stale-while-revalidate_ve_stale-if-error_Sahada_Isleyen_Tarif\">Nginx\u2019te stale-while-revalidate ve stale-if-error: Sahada \u0130\u015fleyen Tarif<\/span><\/h2>\n<h3><span id=\"Proxy_cache_ve_birkac_kucuk_incelik\">Proxy cache ve birka\u00e7 k\u00fc\u00e7\u00fck incelik<\/span><\/h3>\n<p>Nginx, do\u011fru ayarla bu i\u015fi \u00e7ok g\u00fczel yap\u0131yor. Klasik bir reverse proxy kurulumunda, k\u00fc\u00e7\u00fck bir cache alan\u0131 ve baz\u0131 kurallar ile hem h\u0131z kazan\u0131rs\u0131n\u0131z hem de kesinti anlar\u0131nda kullan\u0131c\u0131y\u0131 \u00fczmezsiniz. Benim pratikte s\u0131k kulland\u0131\u011f\u0131m bir iskelet \u015f\u00f6yle olur:<\/p>\n<pre class=\"language-nginx line-numbers\"><code class=\"language-nginx\"># Cache alan\u0131n\u0131 tan\u0131mlay\u0131n (yol, anahtar, boyut, inaktif s\u00fcre vb.)\nproxy_cache_path \/var\/cache\/nginx levels=1:2 keys_zone=MAINCACHE:100m max_size=10g inactive=30m use_temp_path=off;\n\n# Giri\u015f yapan kullan\u0131c\u0131lar veya \u00f6zel \u00e7erezler i\u00e7in cache'i bypass etmek isteyebilirsiniz\nmap $http_cookie $bypass_cache {\n    default 0;\n    ~*(wordpress_logged_in|comment_author|woocommerce_items_in_cart) 1;\n}\n\nserver {\n    listen 80;\n    server_name ornek.com;\n\n    location \/ {\n        proxy_pass http:\/\/backend;\n        proxy_set_header Host $host;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n        # Cache anahtar\u0131 ve kontrol\u00fc\n        proxy_cache MAINCACHE;\n        proxy_cache_key &quot;$scheme$proxy_host$request_uri&quot;;\n        proxy_cache_bypass $bypass_cache;\n        proxy_no_cache $bypass_cache;\n\n        # Hata an\u0131nda bayat i\u00e7eri\u011fi g\u00f6ster\n        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;\n        proxy_cache_background_update on;\n\n        # Origin'den gelen Cache-Control'\u00fc ge\u00e7irme veya override etme\n        # E\u011fer backend\u2019iniz do\u011fru ba\u015fl\u0131klar\u0131 \u00fcretiyorsa, a\u015fa\u011f\u0131daki add_header gerekmez.\n        add_header Cache-Control &quot;public, max-age=60, stale-while-revalidate=300, stale-if-error=86400&quot; always;\n\n        # Cache durumu g\u00f6zlemlemek i\u00e7in header eklemek g\u00fczel olur\n        add_header X-Cache-Status $upstream_cache_status;\n    }\n}\n<\/code><\/pre>\n<p>Burada dikkat edilecek nokta, <strong>proxy_cache_use_stale<\/strong> ve <strong>proxy_cache_background_update<\/strong> ayarlar\u0131. \u0130lki hata veya timeout durumunda eldeki kopyay\u0131 g\u00f6sterir. \u0130kincisi ise g\u00fcncelleme talebini arka plana atarak, yeni isteklere eski kopyay\u0131 h\u0131zl\u0131ca servis eder. B\u00f6ylece \u201chmm, bir yava\u015fl\u0131k var\u201d hissi yerine, \u201csite ak\u0131yor\u201d hissi olu\u015fur. Nginx\u2019in bu y\u00f6ndeki yeteneklerini merak ederseniz, <a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_proxy_module.html#proxy_cache_use_stale\" target=\"_blank\" rel=\"noopener nofollow\">resmi proxy cache belgeleri<\/a> akl\u0131n\u0131z\u0131n bir k\u00f6\u015fesinde dursun.<\/p>\n<p>Bir sahne an\u0131s\u0131: Bir \u00fcr\u00fcn lansman\u0131 ak\u015fam\u0131, beklenenden \u00e7ok trafik geldi. Veritaban\u0131 \u00e7ekirdekleri biraz terledi. Nginx log\u2019lar\u0131nda ufak time-out\u2019lar g\u00f6r\u00fcyordum. Buna ra\u011fmen kullan\u0131c\u0131 \u015fik\u00e2yeti neredeyse hi\u00e7 gelmedi. \u00c7\u00fcnk\u00fc stale-while-revalidate ile sayfalar akmaya devam etti, arka planda veritaban\u0131 kendine geldi. Kampanya bitene kadar her \u015fey bir t\u0131k daha \u201ccool\u201d g\u00f6r\u00fcnd\u00fc.<\/p>\n<p>Tek uyar\u0131: Ki\u015fiselle\u015ftirilmi\u015f sayfalarla dikkatli olun. Kullan\u0131c\u0131ya \u00f6zel sepet, profil, dashboard gibi alanlar\u0131 cache\u2019e dahil etmeyin. \u00c7erezlere g\u00f6re bypass etmek, ya da bu sayfalara \u201cCache-Control: private, no-store\u201d gibi ba\u015fl\u0131klar vermek iyi bir al\u0131\u015fkanl\u0131kt\u0131r.<\/p>\n<h2 id=\"section-4\"><span id=\"Cloudflarede_Pratik_Ayarlar_Kenarda_Kalkan_Ortada_Dans\">Cloudflare\u2019de Pratik Ayarlar: Kenarda Kalkan, Ortada Dans<\/span><\/h2>\n<h3><span id=\"Edgede_hiz_arka_planda_zarif_tazeleme\">Edge\u2019de h\u0131z, arka planda zarif tazeleme<\/span><\/h3>\n<p>Cloudflare kullan\u0131yorsan\u0131z i\u015f daha da keyifli. \u00c7\u00fcnk\u00fc edge taraf\u0131nda, \u201corigin\u2019in dedi\u011fini dinle\u201d prensibiyle, yani sizin Cache-Control ba\u015fl\u0131klar\u0131n\u0131za sayg\u0131 duyarak \u00e7al\u0131\u015ft\u0131rabilirsiniz. En temiz yol, uygulaman\u0131z\u0131n do\u011fru ba\u015fl\u0131klar\u0131 \u00fcretmesi. Cloudflare bunlar\u0131 g\u00f6r\u00fcr, uygular, gerekli yerde bayat i\u00e7eri\u011fi g\u00f6sterir.<\/p>\n<p>Pratikte, \u201cCache Rules\u201d veya eski Page Rules taraf\u0131nda \u201cCache Level: Cache Everything\u201d gibi ayarlar\u0131 sadece ger\u00e7ekten gerekliyse kullan\u0131n. Genelde \u201cOrigin Cache-Control\u201da sad\u0131k kalmak daha sa\u011fl\u0131kl\u0131d\u0131r. \u00d6rne\u011fin \u00fcr\u00fcn listesi sayfalar\u0131na <strong>public, max-age=60, stale-while-revalidate=300, stale-if-error=86400<\/strong> ba\u015fl\u0131\u011f\u0131n\u0131 verin; Cloudflare edge bunu uygular ve k\u0131sa s\u00fcreli origin teklemelerinde kullan\u0131c\u0131y\u0131 mutlu eder.<\/p>\n<p>Bir de g\u00f6z ard\u0131 edilmemesi gereken k\u00fc\u00e7\u00fck incelikler var. \u00d6rne\u011fin query string\u2019ler ve cookie\u2019ler. Cloudflare \u00e7o\u011fu zaman query string\u2019i cache anahtar\u0131na dahil eder. E\u011fer UTM parametreleri gibi pazarlama izleri, cache\u2019i gereksiz par\u00e7alara b\u00f6l\u00fcyorsa, Cache Rules ile bu parametreleri yoksaymak bazen harika sonu\u00e7 verir. Ama dikkatli olmakta fayda var; ayn\u0131 sayfan\u0131n farkl\u0131 varyasyonlar\u0131n\u0131 yanl\u0131\u015fl\u0131kla tek potada eritmeyin.<\/p>\n<p>Cloudflare taraf\u0131yla ilgili daha canl\u0131 \u00f6rnekler seviyorsan\u0131z, edge ba\u011flant\u0131lar\u0131n\u0131 \u201chep a\u00e7\u0131k\u201d tutmaya dair pratik notlar i\u00e7in \u015fu yaz\u0131ya g\u00f6z atabilirsiniz: <a href=\"https:\/\/www.dchost.com\/blog\/cloudflare-ile-websocket-ve-grpc-yayini-nasil-hep-canli-kalir-nginx-timeout-keep%e2%80%91alive-ve-kesintisiz-dagitimin-sirlari\/\">Cloudflare ile WebSocket ve gRPC yay\u0131n\u0131 nas\u0131l hep canl\u0131 kal\u0131r?<\/a> Burada konu\u015ftu\u011fumuz s\u00fcreklilik fikri, cache dayan\u0131kl\u0131l\u0131\u011f\u0131yla \u00e7ok g\u00fczel \u00f6rt\u00fc\u015f\u00fcr; kullan\u0131c\u0131 taraf\u0131nda sessiz sakin bir devaml\u0131l\u0131k hissi yarat\u0131r.<\/p>\n<p>CDN \u00fczerinde ba\u015fka bir tatl\u0131 numara da, k\u00f6ke giden istek say\u0131s\u0131n\u0131 \u201cmakul\u201d tutmak. E\u011fer bir anda onlarca edge konumundan ayn\u0131 anda tazeleme iste\u011fi patl\u0131yorsa, origin gereksiz strese girer. Bu y\u00fczden k\u0131sa <strong>max-age<\/strong> ve bir t\u0131k daha uzun <strong>stale-while-revalidate<\/strong> \u00e7o\u011fu zaman ideal dengedir. Edge tek tek, nazik\u00e7e tazeler.<\/p>\n<h2 id=\"section-5\"><span id=\"WordPresste_Dayanikli_Cache_Eklenti_mi_functionsphp_mi_Sunucu_mu\">WordPress\u2019te Dayan\u0131kl\u0131 Cache: Eklenti mi, functions.php mi, Sunucu mu?<\/span><\/h2>\n<h3><span id=\"Basit_ama_etkili_bir_oyun_plani\">Basit ama etkili bir oyun plan\u0131<\/span><\/h3>\n<p>WordPress d\u00fcnyas\u0131nda sayfa \u00f6nbelle\u011fi genelde bir eklentiyle \u00e7\u00f6z\u00fcl\u00fcyor. Ama i\u015f sadece \u201ccache var m\u0131?\u201d sorusu de\u011fil. As\u0131l fark\u0131, <strong>nas\u0131l<\/strong> cache\u2019ledi\u011finiz ve <strong>ne zaman<\/strong> bayat i\u00e7eri\u011fi g\u00f6stermeyi kabul etti\u011finiz yarat\u0131yor. Burada \u00fc\u00e7 katman var: Uygulaman\u0131n kendisi, web sunucusu (Nginx\/Apache) ve CDN (Cloudflare). En temiz kurguda, WordPress uygun ba\u015fl\u0131klar\u0131 \u00fcretir, Nginx bunlar\u0131 ge\u00e7irir, Cloudflare de uygular. Zincir b\u00f6yle ak\u0131nca i\u015fler tatl\u0131.<\/p>\n<p>\u00d6rne\u011fin functions.php veya k\u00fc\u00e7\u00fck bir \u201cmu-plugin\u201d ile sadece ziyaret\u00e7i sayfalar\u0131nda basit bir ba\u015fl\u0131k ekleyebilirsiniz. Admin veya giri\u015f yapm\u0131\u015f kullan\u0131c\u0131y\u0131 ay\u0131rmak \u00f6nemli. Bunu \u00e7ok yormadan \u015f\u00f6yle yap\u0131yoruz:<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">\/\/ wp-content\/mu-plugins\/cache-headers.php\nadd_action('send_headers', function () {\n    if (is_user_logged_in()) {\n        header('Cache-Control: private, no-store, max-age=0');\n        return;\n    }\n\n    if (is_admin() || is_search()) {\n        header('Cache-Control: private, no-store, max-age=0');\n        return;\n    }\n\n    \/\/ Ana sayfa, kategori, yaz\u0131 gibi herkese a\u00e7\u0131k sayfalar\n    header('Cache-Control: public, max-age=60, stale-while-revalidate=300, stale-if-error=86400');\n});\n<\/code><\/pre>\n<p>Bu sayede WordPress taraf\u0131nda \u201cniyeti\u201d belli etmi\u015f olursunuz. Nginx ve Cloudflare da bu niyete sayg\u0131 duyar. Elbette WooCommerce gibi sepet, \u00f6deme, hesap sayfalar\u0131nda bu ba\u015fl\u0131klar\u0131 g\u00f6ndermemek gerekir. \u00c7o\u011fu pop\u00fcler cache eklentisi zaten bu sayfalar\u0131 otomatik ay\u0131r\u0131yor; ama emin olmak ad\u0131na header mant\u0131\u011f\u0131n\u0131 kendi g\u00f6z\u00fcn\u00fczle basit\u00e7e kontrol etmek iyi bir refleks.<\/p>\n<p>Bu noktada altyap\u0131 dayan\u0131kl\u0131l\u0131\u011f\u0131n\u0131 da hat\u0131rlatmadan ge\u00e7meyeyim. \u00d6rne\u011fin trafik piklerinde TCP ayarlar\u0131n\u0131 do\u011fru yapmak, arka plan\u0131n sakin kalmas\u0131na yard\u0131mc\u0131 olur. Detayl\u0131 pratikler i\u00e7in \u015fu notlar epey i\u015f g\u00f6r\u00fcr: <a href=\"https:\/\/www.dchost.com\/blog\/yuksek-trafikli-wordpress-laravelde-linux-tcp-tuning-sysctl-ayarlari-udp-bufferlari-ve-syn-flooda-karsi-sakin-kalmak\/\">y\u00fcksek trafikli WordPress\u2019te Linux TCP tuning ipu\u00e7lar\u0131<\/a>. Dayan\u0131kl\u0131 cache tek ba\u015f\u0131na kahraman de\u011fildir; do\u011fru a\u011f ayarlar\u0131yla kol kola y\u00fcr\u00fcr.<\/p>\n<h2 id=\"section-6\"><span id=\"Gercek_Dunya_Senaryosu_Bakim_Ani_Sicak_Deploy_ve_Eski_Dost_Stale\">Ger\u00e7ek D\u00fcnya Senaryosu: Bak\u0131m An\u0131, S\u0131cak Deploy ve Eski Dost \u201cStale\u201d<\/span><\/h2>\n<h3><span id=\"Bes_dakikalik_firtinada_semsiyeyi_acmak\">Be\u015f dakikal\u0131k f\u0131rt\u0131nada \u015femsiyeyi a\u00e7mak<\/span><\/h3>\n<p>Bir m\u00fc\u015fteride ya\u015fad\u0131\u011f\u0131m k\u0131sa ama \u00f6\u011fretici bir ak\u015fam\u0131 anlatay\u0131m. Staging\u2019den prod\u2019a k\u00fc\u00e7\u00fck bir \u00f6zellik ge\u00e7ecektik. Veritaban\u0131nda birka\u00e7 migration, backend\u2019de ufak bir API de\u011fi\u015fikli\u011fi. \u201c\u00c7ok s\u00fcrmez\u201d dedik ama ya\u015fam bu, iki dakikal\u0131k i\u015f be\u015f dakikaya uzad\u0131. Tam o s\u0131rada mobil trafik y\u00fckseldi. Korkulan senaryo geldi: backend baz\u0131 endpoint\u2019lerde 502 verdi.<\/p>\n<p>Neyse ki \u00f6nceden haz\u0131rl\u0131\u011f\u0131m\u0131z vard\u0131. \u00dcr\u00fcn listeleme ve blog sayfalar\u0131nda <strong>public, max-age=60, stale-while-revalidate=300, stale-if-error=3600<\/strong> vard\u0131. Cloudflare da origin\u2019in dediklerini dinleyecek \u015fekilde ayarlanm\u0131\u015ft\u0131. Kullan\u0131c\u0131lar ne g\u00f6rd\u00fc? Eski ama d\u00fczg\u00fcn sayfalar. Arada bir iki t\u0131klama gecikti, ama kimse \u201cSite \u00e7\u00f6kt\u00fc\u201d demedi. Biz de arkada sakin sakin deploy\u2019u tamamlad\u0131k.<\/p>\n<p>Benzer ak\u0131\u015flarda load balancer kullananlar i\u00e7in de k\u00fc\u00e7\u00fck bir \u00f6neri: L4\/L7 seviyesinde ak\u0131\u015f\u0131 \u015f\u0131k\u00e7a y\u00f6netmek, \u00e7ok k\u0131sa hatalar\u0131 kullan\u0131c\u0131dan saklamakta yard\u0131mc\u0131 olur. Mesela <a href=\"https:\/\/www.dchost.com\/blog\/haproxy-ile-l4-l7-yuk-dengeleme-nasil-sifir-kesinti-sunar-health-check-sticky-sessions-ve-tls-passthroughu-sade-sade-konusalim\/\">HAProxy ile s\u0131f\u0131r kesinti sunan bir y\u00fck dengeleme<\/a> d\u00fczeni kuruldu\u011funda, stale stratejisiyle \u00e7ok iyi anla\u015f\u0131r. Bir bal\u0131k, bir ekmek gibi.<\/p>\n<p>Planl\u0131 bak\u0131m anlar\u0131nda DNS ve da\u011f\u0131t\u0131m d\u00fczeninizi otomatik hale getirmek de i\u015fe yarar. \u00d6rne\u011fin canary da\u011f\u0131t\u0131mda tek bir node\u2019u g\u00fcncellersiniz, sorun yoksa di\u011ferini. Bu kurguyu pratikle\u015ftirmek i\u00e7in <a href=\"https:\/\/www.dchost.com\/blog\/terraform-ile-vps-ve-dns-otomasyonu-cloudflare-proxmox-openstack-ve-sifir-kesinti-dagitim-nasil-bir-araya-gelir\/\">Terraform ile VPS ve DNS otomasyonu<\/a> \u00fczerine yazd\u0131\u011f\u0131m notlar, g\u00fcnl\u00fck hayatta defalarca hayat kurtard\u0131. Cache sab\u0131r verir, otomasyon h\u0131z kazand\u0131r\u0131r.<\/p>\n<h2 id=\"section-7\"><span id=\"Dogru_Sureleri_Secmek_Fazla_Bayat_Az_Taze_Dengesini_Kurmak\">Do\u011fru S\u00fcreleri Se\u00e7mek: Fazla Bayat, Az Taze Dengesini Kurmak<\/span><\/h2>\n<h3><span id=\"Ne_zaman_kisa_ne_zaman_uzun\">Ne zaman k\u0131sa, ne zaman uzun?<\/span><\/h3>\n<p>\u0130\u015fin p\u00fcf noktas\u0131 \u015fu: max-age\u2019i \u00e7ok k\u0131sa tutarsan\u0131z, arka planda s\u00fcrekli tazeleme olur; origin\u2019e y\u00fck artar. \u00c7ok uzun tutarsan\u0131z, de\u011fi\u015fiklikler ge\u00e7 g\u00f6r\u00fcn\u00fcr. Benim mutfakta kulland\u0131\u011f\u0131m basit tarif: \u201cKritik ama nispeten dura\u011fan sayfalarda 30-120 saniye max-age, \u00fczerine 5-10 dakika stale-while-revalidate; hata an\u0131nda 15-60 dakika stale-if-error.\u201d Elbette bu bir \u015fablon, sizin trafi\u011finiz ve g\u00fcncelleme h\u0131z\u0131n\u0131z esas belirleyicidir.<\/p>\n<p>Mesela \u201cyeni gelen \u00fcr\u00fcnler\u201d sayfas\u0131 g\u00fcnd\u00fczleri daha s\u0131k de\u011fi\u015fiyorsa, g\u00fcnd\u00fcz s\u00fcrelerini k\u0131sa, geceleri bir t\u0131k uzun tutabilirsiniz. Bunu otomatikle\u015ftirmek isteyenler i\u00e7in, uygulama taraf\u0131nda saat bazl\u0131 k\u00fc\u00e7\u00fck bir varyasyon yazmak hi\u00e7 zor de\u011fil. \u00dcstelik CDN taraf\u0131nda \u201ccache key\u201di bozmadan, sadece ba\u015fl\u0131k \u00fczerinden y\u00f6netirsiniz.<\/p>\n<p>\u00d6zetle, <strong>stale-while-revalidate<\/strong> ile kullan\u0131c\u0131 h\u0131z hissini kaybetmesin, <strong>stale-if-error<\/strong> ile k\u00fc\u00e7\u00fck hatalar g\u00f6r\u00fcnmesin. Bununla birlikte \u201cger\u00e7ek zamanl\u0131l\u0131k\u201d ihtiyac\u0131 olan alanlarda (sepetteki adet, ki\u015fisel bildirimler, canl\u0131 skor gibi) cache\u2019i dikkatle s\u0131n\u0131rland\u0131rmak \u015fart. Hepsi ayn\u0131 tencerede pi\u015fmez.<\/p>\n<h2 id=\"section-8\"><span id=\"Gozlem_ve_Sorun_Giderme_Cache_Calisiyor_mu_Diyen_Icin_Kucuk_Arac_Cantasi\">G\u00f6zlem ve Sorun Giderme: \u201cCache \u00c7al\u0131\u015f\u0131yor mu?\u201d Diyen \u0130\u00e7in K\u00fc\u00e7\u00fck Ara\u00e7 \u00c7antas\u0131<\/span><\/h2>\n<h3><span id=\"Headerlara_bak_nefes_al_sonra_karar_ver\">Header\u2019lara bak, nefes al, sonra karar ver<\/span><\/h3>\n<p>\u201cPeki nas\u0131l anlayaca\u011f\u0131z?\u201d sorusu s\u0131k gelir. Ben ilk olarak basit\u00e7e <strong>curl -I<\/strong> ile ba\u015flar\u0131m. Yan\u0131t ba\u015fl\u0131klar\u0131nda Cache-Control, Age, CF-Cache-Status veya X-Cache-Status gibi ipu\u00e7lar\u0131na bakar\u0131m. Nginx taraf\u0131nda <strong>$upstream_cache_status<\/strong> ile \u201cMISS, HIT, EXPIRED, STALE\u201d gibi de\u011ferleri log\u2019a d\u00fc\u015fmek neyin olup bitti\u011fini anlamay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<pre class=\"language-bash line-numbers\"><code class=\"language-bash\">curl -I https:\/\/ornek.com\/\n\nHTTP\/2 200\ncache-control: public, max-age=60, stale-while-revalidate=300, stale-if-error=86400\nage: 42\nx-cache-status: HIT\n<\/code><\/pre>\n<p>Taray\u0131c\u0131 geli\u015ftirici ara\u00e7lar\u0131ndaki \u201cNetwork\u201d paneli de yard\u0131mc\u0131d\u0131r. Bir iste\u011fi tekrar yollay\u0131n, \u201cfrom disk cache \/ from memory cache\u201d veya \u201crevalidated\u201d gibi notlara bak\u0131n. Cloudflare kullan\u0131yorsan\u0131z, <strong>CF-Cache-Status: HIT<\/strong> ba\u015far\u0131l\u0131 bir edge cache\u2019i, <strong>MISS<\/strong> veya <strong>EXPIRED<\/strong> tazelemeyi, <strong>STALE<\/strong> ise bayat i\u00e7eri\u011fin servis edildi\u011fini g\u00f6sterir. Bu k\u00fc\u00e7\u00fck ipu\u00e7lar\u0131yla, \u201cNeden yava\u015flad\u0131?\u201d sorusunu \u00e7ok daha h\u0131zl\u0131 yakalars\u0131n\u0131z.<\/p>\n<p>Haz\u0131r yeri gelmi\u015fken \u015fu ufak notu da d\u00fc\u015feyim: Edge ve origin TLS ayarlar\u0131n\u0131z d\u00fczg\u00fcn olursa, ileti\u015fim p\u00fcr\u00fczs\u00fcz akar. Merakl\u0131s\u0131na, <a href=\"https:\/\/www.dchost.com\/blog\/nginx-apachede-ecdsa-rsa-ikili-ssl-uyumluluk-mu-hiz-mi-ikisini-birden-nasil-alirsin\/\">Nginx\/Apache\u2019de ECDSA + RSA ikili SSL<\/a> \u00fczerine notlar da pratikte hissedilir fark yarat\u0131r. Her katman\u0131 t\u0131k\u0131r t\u0131k\u0131r yapt\u0131\u011f\u0131n\u0131zda, cache stratejisi \u00e7ok daha etkili sonu\u00e7 verir.<\/p>\n<h2 id=\"section-9\"><span id=\"Gelismis_Ipuclari_Ince_Ayarlarla_Tatlandirmak\">Geli\u015fmi\u015f \u0130pu\u00e7lar\u0131: \u0130nce Ayarlarla Tatland\u0131rmak<\/span><\/h2>\n<h3><span id=\"Vary_ETag_ve_arkadaslari\">Vary, ETag ve arkada\u015flar\u0131<\/span><\/h3>\n<p>G\u00fcn gelir \u201cDil se\u00e7imi, cihaz tipi\u201d gibi farkl\u0131 varyasyonlar\u0131 y\u00f6netmek istersiniz. Burada <strong>Vary<\/strong> ba\u015fl\u0131\u011f\u0131 devreye girer. \u00d6rne\u011fin <strong>Vary: Accept-Encoding<\/strong> zaten klasik. Buna ilave olarak <strong>Vary: Accept-Language<\/strong> kullan\u0131yorsan\u0131z, cache\u2019iniz dil ba\u015f\u0131na ayr\u0131 kopya tutar. Bu iyi mi k\u00f6t\u00fc m\u00fc? \u0130\u00e7eri\u011finize ba\u011fl\u0131. E\u011fer tek dildeyseniz, vary\u2019\u0131 abartmay\u0131n. Gereksiz vary \u00e7o\u011falmas\u0131, cache etkinli\u011fini d\u00fc\u015f\u00fcr\u00fcr.<\/p>\n<p><strong>ETag<\/strong> ve <strong>If-None-Match<\/strong> da tazeleme anlar\u0131nda bant geni\u015fli\u011fini korumak i\u00e7in yararl\u0131d\u0131r. ETag sabit kald\u0131k\u00e7a, \u201c304 Not Modified\u201d d\u00f6ner ve y\u00fck hafifler. Ama \u015funu unutmay\u0131n: stale-while-revalidate ile hedeflenen \u015fey, <em>h\u0131zl\u0131ca bir \u015fey g\u00f6stermek<\/em>. ETag ise daha \u00e7ok \u201cde\u011fi\u015fmedi, bo\u015funa indirme\u201d demek. \u0130kisi birbirini tamamlar ama ayn\u0131 rol\u00fc oynamaz.<\/p>\n<p>Cloudflare veya Nginx taraf\u0131nda, cache anahtar\u0131n\u0131z\u0131 a\u015f\u0131r\u0131 zenginle\u015ftirmekten ka\u00e7\u0131n\u0131n. Query string\u2019in her bir parametresi anahtara girerse, \u201ctek sayfa on farkl\u0131 anahtar\u201da d\u00f6n\u00fc\u015f\u00fcr. Bunun yerine kritik parametreleri tutup, geri kalan\u0131n\u0131 yoksaymak \u00e7o\u011fu zaman daha verimli. Tam tersi, ki\u015fiselle\u015ftirme varsa, o parametreyi mutlaka anahtara dahil edin. \u0130nce ayar dedi\u011fimiz bu i\u015f, birka\u00e7 g\u00fcn g\u00f6zlemle kendini belli eder.<\/p>\n<p>Bir dipnot daha: CDN ve origin g\u00fcncellemelerini ayn\u0131 anda ko\u015farken \u201cbo\u015fluk\u201d an\u0131 yaratmamaya \u00e7al\u0131\u015f\u0131n. \u00d6rne\u011fin DNS, TLS, backend ve cache ayarlar\u0131n\u0131z\u0131n birlikte akmas\u0131 i\u00e7in <a href=\"https:\/\/www.dchost.com\/blog\/terraform-ile-vps-ve-dns-otomasyonu-cloudflare-proxmox-openstack-ve-sifir-kesinti-dagitim-nasil-bir-araya-gelir\/\">VPS ve DNS otomasyonu<\/a> yaz\u0131s\u0131ndaki gibi k\u00fc\u00e7\u00fck otomasyonlar harika i\u015f g\u00f6r\u00fcr. Bir de, kesinti dayan\u0131m\u0131n\u0131 art\u0131rmak i\u00e7in ayakta kalan node\u2019lar\u0131 sayg\u0131yla y\u00f6netmek gerekir; burada <a href=\"https:\/\/www.dchost.com\/blog\/haproxy-ile-l4-l7-yuk-dengeleme-nasil-sifir-kesinti-sunar-health-check-sticky-sessions-ve-tls-passthroughu-sade-sade-konusalim\/\">HAProxy<\/a> gibi bir katman, k\u00f6t\u00fc s\u00fcrprizlere kar\u015f\u0131 iyi bir yast\u0131k olur.<\/p>\n<h2 id=\"section-10\"><span id=\"Sik_Karsilasilan_Hatalar_Neleri_Yapmayalim\">S\u0131k Kar\u015f\u0131la\u015f\u0131lan Hatalar: Neleri Yapmayal\u0131m?<\/span><\/h2>\n<h3><span id=\"Her_seyi_cachee_koy_degil_dogru_seyi_dogru_sureyle\">\u201cHer \u015feyi cache\u2019e koy\u201d de\u011fil, \u201cdo\u011fru \u015feyi do\u011fru s\u00fcreyle\u201d<\/span><\/h3>\n<p>\u0130lk hata genelde \u015fu: Her \u015feyi cache\u2019e koyup, sonra \u201caa kullan\u0131c\u0131 X, Y\u2019nin sepetini g\u00f6rd\u00fc\u201d gibi tats\u0131z s\u00fcrprizlerle u\u011fra\u015fmak. Net ayr\u0131m \u015fart. Giri\u015f yap\u0131lan sayfalar, \u00f6deme ad\u0131mlar\u0131, kullan\u0131c\u0131ya \u00f6zel raporlar <strong>no-store<\/strong> olsun. Geri kalan herkese a\u00e7\u0131k listeler, blog yaz\u0131lar\u0131, kategori sayfalar\u0131 <strong>public<\/strong> ve stale\u2019li.<\/p>\n<p>\u0130kincisi, k\u00f6k sayfay\u0131 \u00e7ok uzun s\u00fcre taze tutmak. \u201cAnasayfa sabit ya\u201d diyerek 1 saat taze tutunca, i\u00e7erik ekleyen ekip \u201cniye g\u00f6r\u00fcnm\u00fcyor\u201d der. Bu moral bozucu olur. Onun yerine k\u0131sa taze, uzun stale iyi gider. \u00dc\u00e7\u00fcnc\u00fcs\u00fc, debug etmeyi zorla\u015ft\u0131rmak. L\u00fctfen hem Nginx hem CDN taraf\u0131nda basit bir \u201cX-Cache-Status\u201d benzeri header d\u00f6nd\u00fcr\u00fcn. Sorun \u00e7\u00f6zmek, g\u00f6zle g\u00f6r\u00fcn\u00fcr oldu\u011funda kolayd\u0131r.<\/p>\n<p>Son olarak, izleme olmadan cache stratejisi y\u00fcr\u00fctmeyin. Hata oranlar\u0131n\u0131, yan\u0131t s\u00fcrelerini, edge miss\/hit da\u011f\u0131l\u0131m\u0131n\u0131 izleyin. Log\u2019lara ara s\u0131ra bak\u0131n. Bir iki k\u00fc\u00e7\u00fck grafik, koca f\u0131rt\u0131nalar\u0131 \u00f6nceden g\u00f6sterir. Bu arada Cloudflare ve benzeri CDN\u2019lerde Cache-Control\u2019\u00fcn davran\u0131\u015flar\u0131 i\u00e7in \u00fcretici dok\u00fcmantasyonlar\u0131 da g\u00fcnceldir; isterseniz bir ara <a href=\"https:\/\/developers.cloudflare.com\/cache\/about\/cache-control\/\" target=\"_blank\" rel=\"noopener nofollow\">Cloudflare\u2019\u0131n cache-control notlar\u0131na<\/a> g\u00f6z at\u0131n.<\/p>\n<h2 id=\"section-11\"><span id=\"Kapanis_Kucuk_Bir_Baslik_Buyuk_Bir_Huzur\">Kapan\u0131\u015f: K\u00fc\u00e7\u00fck Bir Ba\u015fl\u0131k, B\u00fcy\u00fck Bir Huzur<\/span><\/h2>\n<h3><span id=\"Yolun_sonu_degil_guzel_bir_baslangic\">Yolun sonu de\u011fil, g\u00fczel bir ba\u015flang\u0131\u00e7<\/span><\/h3>\n<p>stale-while-revalidate ve stale-if-error, kula\u011fa basit geliyor. Asl\u0131nda basitler de. G\u00fc\u00e7leri, do\u011fru yerde, do\u011fru s\u00fcreyle devreye girmelerinden geliyor. Nginx taraf\u0131nda iki \u00fc\u00e7 sat\u0131r ayar, WordPress\u2019te bir k\u00fc\u00e7\u00fck mu-plugin, Cloudflare\u2019de \u201corigin\u2019in dedi\u011fini dinle\u201d prensibi\u2026 Hepsi birle\u015fince kullan\u0131c\u0131 taraf\u0131nda p\u00fcr\u00fczs\u00fcz bir deneyim do\u011fuyor. Kesintiler hayat\u0131n ger\u00e7e\u011fi, ama herkesin g\u00f6z\u00fc \u00f6n\u00fcnde olmas\u0131 \u015fart de\u011fil.<\/p>\n<p>Bu yaz\u0131da \u00f6nce mant\u0131\u011f\u0131n\u0131 konu\u015ftuk, sonra sahada nas\u0131l kuraca\u011f\u0131m\u0131z\u0131 g\u00f6sterdik. Art\u0131k elinizde pratik bir \u00e7anta var: HTTP ba\u015fl\u0131klar\u0131n\u0131 anlayan g\u00f6z, Nginx\u2019te arka plan g\u00fcncellemeyi a\u00e7an parmak, Cloudflare\u2019de sakinlik veren bir kural seti. Bundan sonras\u0131, k\u00fc\u00e7\u00fck \u00f6l\u00e7\u00fcp bi\u00e7meler. \u0130lk ad\u0131mda anasayfa ve blog listesi gibi sayfalarda ba\u015flay\u0131n. Sonra trafi\u011finize g\u00f6re s\u00fcreleri oynay\u0131n. G\u00f6zlemleyin, ince ayar verin. K\u00fc\u00e7\u00fck dokunu\u015flarla b\u00fcy\u00fck rahatl\u0131k geliyor.<\/p>\n<p>Umar\u0131m bu notlar i\u015finize yarar. Sizin de sahadan hik\u00e2yeleriniz varsa, duymay\u0131 \u00e7ok isterim. Bir dahaki yaz\u0131da yine altyap\u0131n\u0131n mutfa\u011f\u0131ndan bir ba\u015fka tatl\u0131 stratejiyle bulu\u015fal\u0131m. O zamana kadar, cache\u2019iniz hep \u201csakin\u201d, kullan\u0131c\u0131lar\u0131n\u0131z hep \u201cmutlu\u201d kals\u0131n.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Hi\u00e7 ba\u015f\u0131n\u0131za geldi mi? Trafi\u011fin \u015fenlendi\u011fi bir ak\u015fam, sitenin tam da kampanya sayfas\u0131 a\u00e7\u0131ld\u0131\u011f\u0131 an, sunucu bir anl\u0131\u011f\u0131na tekler. Telefon \u00e7almaya ba\u015flar, Slack susmaz, izleme panosu k\u0131pk\u0131rm\u0131z\u0131. O s\u0131rada akl\u0131mdan hep \u015fu ge\u00e7er: Ke\u015fke taray\u0131c\u0131ya, \u201cBir dakika sakin ol, bende h\u00e2l\u00e2 g\u00fczel bir kopya var, onu g\u00f6stereyim, arkada tazelemeye \u00e7al\u0131\u015fay\u0131m\u201d diyebilsem. \u0130\u015fte tam bu noktada [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1795,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-1794","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1794","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=1794"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/1794\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/1795"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=1794"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=1794"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=1794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}