{"id":36454,"date":"2025-12-18T00:40:53","date_gmt":"2025-12-17T21:40:53","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36454"},"modified":"2025-12-18T00:40:53","modified_gmt":"2025-12-17T21:40:53","slug":"nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/","title":{"rendered":"Nginx&#8217;in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8)"},"content":{"rendered":"<p><body><\/p>\n<h2>Nginx&#8217;in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8)<\/h2>\n<p>Web performans\u0131, modern internet deneyiminin temel ta\u015flar\u0131ndan biridir. Kullan\u0131c\u0131lar h\u0131zl\u0131 y\u00fcklenen web siteleri beklerken, sunucu kaynaklar\u0131 da verimli kullan\u0131lmal\u0131d\u0131r. Taray\u0131c\u0131 \u00f6nbellekleme (Browser Caching), bu iki hedefe ula\u015fmak i\u00e7in en etkili y\u00f6ntemlerden biridir. Bu teknik makalede, g\u00fc\u00e7l\u00fc ve pop\u00fcler bir web sunucusu olan Nginx&#8217;i CentOS 8 i\u015fletim sistemi \u00fczerinde kullanarak taray\u0131c\u0131 \u00f6nbelleklemenin nas\u0131l uygulanaca\u011f\u0131n\u0131, HTTP \u00f6nbellekleme ba\u015fl\u0131klar\u0131n\u0131n derinlemesine anla\u015f\u0131lmas\u0131 ve Nginx&#8217;in <code>http_headers_module<\/code> taraf\u0131ndan sa\u011flanan direktiflerin pratik uygulamalar\u0131yla ad\u0131m ad\u0131m a\u00e7\u0131klayaca\u011f\u0131z.<\/p>\n<h3>Giri\u015f: Taray\u0131c\u0131 \u00d6nbellekleme ve \u00d6nemi<\/h3>\n<p>Taray\u0131c\u0131 \u00f6nbellekleme, bir web sitesini ziyaret etti\u011finizde taray\u0131c\u0131n\u0131z\u0131n (Chrome, Firefox, Safari vb.) web sunucusundan ald\u0131\u011f\u0131 baz\u0131 dosyalar\u0131 (resimler, CSS dosyalar\u0131, JavaScript dosyalar\u0131, fontlar vb.) yerel olarak depolamas\u0131 i\u015flemidir. Bir sonraki ayn\u0131 web sitesi ziyaretinizde veya ayn\u0131 kaynaklara ihtiya\u00e7 duyan ba\u015fka bir sayfaya ge\u00e7ti\u011finizde, taray\u0131c\u0131 bu dosyalar\u0131 tekrar sunucudan indirmek yerine kendi yerel \u00f6nbelle\u011finden y\u00fckler.<\/p>\n<p>Bu yakla\u015f\u0131m\u0131n bir\u00e7ok \u00f6nemli faydas\u0131 vard\u0131r:<\/p>\n<p>*   <strong>Daha H\u0131zl\u0131 Y\u00fckleme S\u00fcreleri:<\/strong> Kullan\u0131c\u0131lar i\u00e7in web sayfalar\u0131 \u00e7ok daha h\u0131zl\u0131 y\u00fcklenir, bu da daha iyi bir kullan\u0131c\u0131 deneyimi sa\u011flar.<br \/>\n*   <strong>Daha Az Sunucu Y\u00fck\u00fc:<\/strong> Sunucunun her istekte ayn\u0131 statik dosyalar\u0131 tekrar tekrar g\u00f6ndermesi gerekmez, bu da sunucu kaynaklar\u0131n\u0131n (bant geni\u015fli\u011fi, CPU) daha verimli kullan\u0131lmas\u0131na olanak tan\u0131r.<br \/>\n*   <strong>Daha Az Bant Geni\u015fli\u011fi Kullan\u0131m\u0131:<\/strong> Hem sunucu hem de istemci taraf\u0131nda veri transferi azal\u0131r, bu da \u00f6zellikle mobil kullan\u0131c\u0131lar i\u00e7in maliyet avantaj\u0131 sa\u011flayabilir.<br \/>\n*   <strong>SEO \u0130yile\u015ftirmesi:<\/strong> Arama motorlar\u0131, h\u0131zl\u0131 y\u00fcklenen siteleri tercih eder. Taray\u0131c\u0131 \u00f6nbellekleme, sitenizin SEO s\u0131ralamas\u0131n\u0131 dolayl\u0131 olarak iyile\u015ftirebilir.<\/p>\n<p>Nginx, esnek yap\u0131land\u0131rma se\u00e7enekleri ve y\u00fcksek performans\u0131 sayesinde taray\u0131c\u0131 \u00f6nbelleklemesini uygulamak i\u00e7in m\u00fckemmel bir ara\u00e7t\u0131r. \u00d6zellikle <code>http_headers_module<\/code> (genellikle varsay\u0131lan olarak derlenmi\u015f gelir) arac\u0131l\u0131\u011f\u0131yla HTTP ba\u015fl\u0131klar\u0131n\u0131 y\u00f6netme yetene\u011fi, \u00f6nbellekleme stratejilerini hassas bir \u015fekilde kontrol etmemizi sa\u011flar.<\/p>\n<h3>\u00d6nko\u015fullar<\/h3>\n<p>Bu makaledeki ad\u0131mlar\u0131 uygulayabilmek i\u00e7in a\u015fa\u011f\u0131daki \u00f6nko\u015fullara sahip olman\u0131z gerekmektedir:<\/p>\n<p>*   CentOS 8 i\u015fletim sistemi y\u00fckl\u00fc bir sunucu.<br \/>\n*   <code>sudo<\/code> yetkilerine sahip bir kullan\u0131c\u0131 hesab\u0131.<br \/>\n*   Nginx web sunucusu y\u00fckl\u00fc ve \u00e7al\u0131\u015f\u0131r durumda olmal\u0131d\u0131r. E\u011fer y\u00fckl\u00fc de\u011filse, kurulum ad\u0131mlar\u0131 a\u015fa\u011f\u0131da k\u0131saca a\u00e7\u0131klanacakt\u0131r.<br \/>\n*   Temel Linux komut sat\u0131r\u0131 bilgisi.<\/p>\n<h3>HTTP \u00d6nbellekleme Ba\u015fl\u0131klar\u0131n\u0131 Anlamak<\/h3>\n<p>Taray\u0131c\u0131 \u00f6nbelleklemesi, HTTP protokol\u00fcn\u00fcn bir par\u00e7as\u0131 olan belirli ba\u015fl\u0131klar arac\u0131l\u0131\u011f\u0131yla y\u00f6netilir. Bu ba\u015fl\u0131klar, sunucunun taray\u0131c\u0131ya bir kayna\u011f\u0131 ne kadar s\u00fcreyle \u00f6nbelle\u011fe almas\u0131 gerekti\u011fini, ne zaman yeniden do\u011frulama yapmas\u0131 gerekti\u011fini ve \u00f6nbelle\u011fe al\u0131n\u0131p al\u0131nmayaca\u011f\u0131n\u0131 bildirir.<\/p>\n<h4>1. Cache-Control<\/h4>\n<p><code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131, HTTP\/1.1&#8217;in en g\u00fc\u00e7l\u00fc ve esnek \u00f6nbellekleme mekanizmas\u0131d\u0131r. Bir kayna\u011f\u0131n nas\u0131l \u00f6nbelle\u011fe al\u0131naca\u011f\u0131n\u0131 ve \u00f6nbelle\u011fin davran\u0131\u015f\u0131n\u0131 kontrol etmek i\u00e7in bir dizi y\u00f6nerge i\u00e7erir:<\/p>\n<p>*   <strong><code>max-age=<saniye><\/code><\/strong>: Kayna\u011f\u0131n sunucuya yeniden do\u011frulama yapmadan \u00f6nce ne kadar s\u00fcreyle \u00f6nbellekte ge\u00e7erli kalaca\u011f\u0131n\u0131 saniye cinsinden belirtir. \u00d6rne\u011fin, <code>max-age=3600<\/code> bir saat boyunca \u00f6nbelle\u011fe al\u0131nmas\u0131 gerekti\u011fini s\u00f6yler.<br \/>\n*   <strong><code>no-cache<\/code><\/strong>: Taray\u0131c\u0131ya, kayna\u011f\u0131 her kullanmadan \u00f6nce sunucuyla yeniden do\u011frulamas\u0131n\u0131 s\u00f6yler. Kaynak de\u011fi\u015fmemi\u015fse <code>304 Not Modified<\/code> yan\u0131t\u0131 al\u0131n\u0131r ve \u00f6nbellekteki s\u00fcr\u00fcm kullan\u0131l\u0131r.<br \/>\n*   <strong><code>no-store<\/code><\/strong>: Kayna\u011f\u0131n hi\u00e7bir ko\u015fulda \u00f6nbelle\u011fe al\u0131nmamas\u0131 gerekti\u011fini belirtir. Hassas bilgiler i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong><code>public<\/code><\/strong>: Yan\u0131t\u0131n herhangi bir \u00f6nbellek (taray\u0131c\u0131, proxy sunucusu vb.) taraf\u0131ndan \u00f6nbelle\u011fe al\u0131nabilece\u011fini belirtir.<br \/>\n*   <strong><code>private<\/code><\/strong>: Yan\u0131t\u0131n yaln\u0131zca istemci taray\u0131c\u0131s\u0131 taraf\u0131ndan \u00f6nbelle\u011fe al\u0131nabilece\u011fini, payla\u015f\u0131lan \u00f6nbellekler (proxy sunucular\u0131 gibi) taraf\u0131ndan al\u0131nmamas\u0131 gerekti\u011fini belirtir. Genellikle kullan\u0131c\u0131ya \u00f6zel i\u00e7erikler i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong><code>must-revalidate<\/code><\/strong>: \u00d6nbelle\u011fin s\u00fcresi doldu\u011funda (max-age bitti\u011finde), taray\u0131c\u0131n\u0131n kayna\u011f\u0131 kullanmadan \u00f6nce sunucuyla yeniden do\u011frulamas\u0131n\u0131 zorunlu k\u0131lar.<br \/>\n*   <strong><code>proxy-revalidate<\/code><\/strong>: <code>must-revalidate<\/code> ile benzerdir, ancak yaln\u0131zca payla\u015f\u0131lan \u00f6nbellekler (proxy&#8217;ler) i\u00e7in ge\u00e7erlidir.<\/p>\n<p>\u00d6rnek: <code>Cache-Control: public, max-age=31536000, immutable<\/code> (Bir y\u0131l boyunca genel olarak \u00f6nbelle\u011fe al\u0131nabilir ve de\u011fi\u015fmez kabul edilebilir).<\/p>\n<h4>2. Expires<\/h4>\n<p><code>Expires<\/code> ba\u015fl\u0131\u011f\u0131, HTTP\/1.0&#8217;dan kalma eski bir ba\u015fl\u0131kt\u0131r ve bir kayna\u011f\u0131n belirli bir tarih ve saate kadar ge\u00e7erli oldu\u011funu belirtir. <code>Cache-Control: max-age<\/code> ile birlikte kullan\u0131ld\u0131\u011f\u0131nda, <code>max-age<\/code> daha y\u00fcksek \u00f6nceli\u011fe sahiptir. Modern uygulamalarda genellikle <code>Cache-Control<\/code> tercih edilir, ancak geriye d\u00f6n\u00fck uyumluluk i\u00e7in hala faydal\u0131d\u0131r.<\/p>\n<p>\u00d6rnek: <code>Expires: Thu, 01 Jan 2025 00:00:00 GMT<\/code><\/p>\n<h4>3. ETag (Entity Tag)<\/h4>\n<p><code>ETag<\/code>, bir kayna\u011f\u0131n belirli bir s\u00fcr\u00fcm\u00fcn\u00fc temsil eden benzersiz bir tan\u0131mlay\u0131c\u0131d\u0131r (genellikle bir hash de\u011feri). Taray\u0131c\u0131 bir kayna\u011f\u0131 \u00f6nbelle\u011fe ald\u0131\u011f\u0131nda, <code>ETag<\/code> de\u011ferini de saklar. Bir sonraki istekte, taray\u0131c\u0131 sunucuya <code>If-None-Match<\/code> ba\u015fl\u0131\u011f\u0131 ile bu <code>ETag<\/code> de\u011ferini g\u00f6nderir. E\u011fer sunucudaki kaynak de\u011fi\u015fmemi\u015fse, sunucu <code>304 Not Modified<\/code> yan\u0131t\u0131 d\u00f6ner ve taray\u0131c\u0131 \u00f6nbellekteki s\u00fcr\u00fcm\u00fc kullan\u0131r. Bu, bant geni\u015fli\u011fini korur ve sunucu y\u00fck\u00fcn\u00fc azalt\u0131r.<\/p>\n<p>\u00d6rnek: <code>ETag: \"5f3a7b8c-1a2b\"<\/code><\/p>\n<h4>4. Last-Modified<\/h4>\n<p><code>Last-Modified<\/code> ba\u015fl\u0131\u011f\u0131, bir kayna\u011f\u0131n son de\u011fi\u015ftirilme tarihini belirtir. <code>ETag<\/code> ile benzer \u015fekilde, taray\u0131c\u0131 bu de\u011feri \u00f6nbelle\u011fe al\u0131r ve bir sonraki istekte sunucuya <code>If-Modified-Since<\/code> ba\u015fl\u0131\u011f\u0131 ile g\u00f6nderir. E\u011fer kaynak belirtilen tarihten sonra de\u011fi\u015fmemi\u015fse, sunucu <code>304 Not Modified<\/code> yan\u0131t\u0131 d\u00f6ner.<\/p>\n<p>\u00d6rnek: <code>Last-Modified: Wed, 18 Aug 2023 10:00:00 GMT<\/code><\/p>\n<h4>5. Vary<\/h4>\n<p><code>Vary<\/code> ba\u015fl\u0131\u011f\u0131, sunucuya, bir yan\u0131t\u0131n i\u00e7eri\u011finin hangi istek ba\u015fl\u0131klar\u0131na g\u00f6re de\u011fi\u015febilece\u011fini bildirir. \u00d6rne\u011fin, <code>Vary: Accept-Encoding<\/code> ba\u015fl\u0131\u011f\u0131, sunucunun s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f (gzip) ve s\u0131k\u0131\u015ft\u0131r\u0131lmam\u0131\u015f i\u00e7erik i\u00e7in farkl\u0131 yan\u0131tlar g\u00f6nderebilece\u011fini ve bu nedenle \u00f6nbelleklerin bu farkl\u0131l\u0131klar\u0131 dikkate almas\u0131 gerekti\u011fini belirtir. Bu, taray\u0131c\u0131lar\u0131n veya proxy&#8217;lerin ayn\u0131 URL i\u00e7in farkl\u0131 \u00f6nbellek giri\u015fleri tutmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>\u00d6rnek: <code>Vary: Accept-Encoding, User-Agent<\/code><\/p>\n<h3>Nginx&#8217;in \u00d6nbellekleme Direktifleri<\/h3>\n<p>Nginx, <code>http_headers_module<\/code> arac\u0131l\u0131\u011f\u0131yla bu HTTP \u00f6nbellekleme ba\u015fl\u0131klar\u0131n\u0131 yap\u0131land\u0131rmak i\u00e7in g\u00fc\u00e7l\u00fc direktifler sunar.<\/p>\n<h4>1. <code>expires<\/code> Direktifi<\/h4>\n<p><code>expires<\/code> direktifi, <code>Cache-Control: max-age<\/code> ve <code>Expires<\/code> ba\u015fl\u0131klar\u0131n\u0131 otomatik olarak ayarlaman\u0131n en basit yoludur. \u00d6zellikle statik dosyalar i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<p>*   <strong>S\u00f6zdizimi:<\/strong> <code>expires [off|epoch|max|time];<\/code><br \/>\n*   <strong>\u00d6rnekler:<\/strong><br \/>\n    *   <code>expires 1h;<\/code> (1 saat \u00f6nbelle\u011fe al)<br \/>\n    *   <code>expires 30d;<\/code> (30 g\u00fcn \u00f6nbelle\u011fe al)<br \/>\n    *   <code>expires -1;<\/code> (Hemen s\u00fcresi dolmu\u015f olarak i\u015faretle, <code>Cache-Control: no-cache<\/code> veya <code>no-store<\/code> ile birlikte kullan\u0131labilir)<br \/>\n    *   <code>expires epoch;<\/code> (1 Ocak 1970&#8217;e ayarlar, <code>Expires<\/code> ba\u015fl\u0131\u011f\u0131 i\u00e7in eski bir y\u00f6ntem)<br \/>\n    *   <code>expires max;<\/code> (Maksimum m\u00fcmk\u00fcn olan de\u011feri ayarlar)<br \/>\n    *   <code>expires off;<\/code> (\u00d6nbellekleme ba\u015fl\u0131klar\u0131n\u0131 kapat\u0131r)<\/p>\n<p><code>expires<\/code> direktifi, <code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 <code>public, max-age=<saniye><\/code> olarak ve <code>Expires<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 belirtilen s\u00fcreye g\u00f6re ayarlar.<\/p>\n<h4>2. <code>add_header<\/code> Direktifi<\/h4>\n<p><code>add_header<\/code> direktifi, yan\u0131t ba\u015fl\u0131klar\u0131na herhangi bir \u00f6zel HTTP ba\u015fl\u0131\u011f\u0131 eklemek i\u00e7in kullan\u0131l\u0131r. Bu, <code>Cache-Control<\/code>&#8216;un daha spesifik y\u00f6nergelerini (\u00f6rne\u011fin <code>no-store<\/code>, <code>must-revalidate<\/code>, <code>immutable<\/code>) veya di\u011fer \u00f6nbellekleme ba\u015fl\u0131klar\u0131n\u0131 (\u00f6rne\u011fin <code>Vary<\/code>) manuel olarak ayarlamak i\u00e7in idealdir.<\/p>\n<p>*   <strong>S\u00f6zdizimi:<\/strong> <code>add_header name value [always];<\/code><br \/>\n*   <strong>\u00d6rnekler:<\/strong><br \/>\n    *   <code>add_header Cache-Control \"no-cache, no-store, must-revalidate\";<\/code><br \/>\n    *   <code>add_header Vary \"Accept-Encoding\";<\/code><br \/>\n    *   <code>add_header X-Custom-Header \"My Value\";<\/code><\/p>\n<p><code>always<\/code> parametresi, yan\u0131t kodu 200, 201, 204, 206, 301, 302, 303, 304 veya 307 olmasa bile ba\u015fl\u0131\u011f\u0131n eklenmesini sa\u011flar.<\/p>\n<h4>3. <code>etag<\/code> Direktifi<\/h4>\n<p>Nginx, statik dosyalar i\u00e7in varsay\u0131lan olarak <code>ETag<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 otomatik olarak olu\u015fturur ve g\u00f6nderir. Ancak bu davran\u0131\u015f\u0131 kontrol etmek m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<p>*   <strong>S\u00f6zdizimi:<\/strong> <code>etag on | off;<\/code><br \/>\n*   <strong>\u00d6rnek:<\/strong> <code>etag on;<\/code> (Genellikle varsay\u0131lan olarak a\u00e7\u0131kt\u0131r.)<\/p>\n<h3>CentOS 8 \u00dczerinde Nginx ile Taray\u0131c\u0131 \u00d6nbellekleme Uygulama Ad\u0131mlar\u0131<\/h3>\n<p>\u015eimdi, teorik bilgileri pratik ad\u0131mlara d\u00f6kelim.<\/p>\n<h4>Ad\u0131m 1: Nginx Kurulumu (Gerekirse)<\/h4>\n<p>E\u011fer Nginx sunucunuz CentOS 8 \u00fczerinde kurulu de\u011filse, a\u015fa\u011f\u0131daki komutlar\u0131 kullanarak kurabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo dnf update -y\nsudo dnf install nginx -y\nsudo systemctl enable --now nginx\nsudo firewall-cmd --permanent --add-service=http\nsudo firewall-cmd --permanent --add-service=https\nsudo firewall-cmd --reload<\/code><\/pre>\n<p>Bu komutlar, Nginx&#8217;i kurar, sistem ba\u015flang\u0131c\u0131nda otomatik ba\u015flamas\u0131n\u0131 sa\u011flar, Nginx servisini ba\u015flat\u0131r ve g\u00fcvenlik duvar\u0131nda HTTP\/HTTPS trafi\u011fine izin verir.<\/p>\n<h4>Ad\u0131m 2: Temel Nginx Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Nginx yap\u0131land\u0131rma dosyalar\u0131 genellikle <code>\/etc\/nginx\/<\/code> dizininde bulunur. Ana yap\u0131land\u0131rma dosyas\u0131 <code>\/etc\/nginx\/nginx.conf<\/code>&#8216;tur. \u00c7o\u011fu durumda, siteye \u00f6zel yap\u0131land\u0131rmalar <code>\/etc\/nginx\/conf.d\/<\/code> dizinindeki <code>.conf<\/code> uzant\u0131l\u0131 dosyalara yaz\u0131l\u0131r. Bu, yap\u0131land\u0131rmay\u0131 daha d\u00fczenli tutar.<\/p>\n<p>\u00d6rne\u011fin, <code>example.com.conf<\/code> ad\u0131nda bir dosya olu\u015fturabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/conf.d\/example.com.conf<\/code><\/pre>\n<p>\u0130\u00e7erisine temel bir <code>server<\/code> blo\u011fu ekleyelim:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name example.com www.example.com;\n    root \/usr\/share\/nginx\/html; # Statik dosyalar\u0131n\u0131z\u0131n bulundu\u011fu k\u00f6k dizin\n    index index.html index.htm;\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n\n    # Di\u011fer yap\u0131land\u0131rmalar buraya gelecek\n}<\/code><\/pre>\n<h4>Ad\u0131m 3: Statik Dosyalar \u0130\u00e7in \u00d6nbellekleme Uygulamas\u0131<\/h4>\n<p>Statik dosyalar (resimler, CSS, JavaScript, fontlar vb.) nadiren de\u011fi\u015fti\u011fi i\u00e7in agresif bir \u015fekilde \u00f6nbelle\u011fe al\u0131nabilirler. Bu, taray\u0131c\u0131 \u00f6nbelleklemesinin en b\u00fcy\u00fck faydalar\u0131n\u0131 sa\u011flad\u0131\u011f\u0131 aland\u0131r.<\/p>\n<p><code>server<\/code> blo\u011funuzun i\u00e7ine veya ayr\u0131 bir <code>location<\/code> blo\u011fu i\u00e7inde statik dosyalar i\u00e7in \u00f6nbellekleme kurallar\u0131n\u0131 tan\u0131mlayaca\u011f\u0131z.<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name example.com www.example.com;\n    root \/usr\/share\/nginx\/html;\n    index index.html index.htm;\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n\n    # Resimler i\u00e7in \u00f6nbellekleme\n    location ~* \\.(jpg|jpeg|gif|png|svg|ico)$ {\n        expires 30d; # 30 g\u00fcn boyunca \u00f6nbelle\u011fe al\n        add_header Cache-Control \"public, max-age=2592000\"; # A\u00e7\u0131k\u00e7a belirtmek i\u00e7in\n        add_header ETag on; # ETag'i etkinle\u015ftir (genellikle varsay\u0131lan olarak a\u00e7\u0131k)\n        add_header Vary \"Accept-Encoding\"; # S\u0131k\u0131\u015ft\u0131rma i\u00e7in vary ba\u015fl\u0131\u011f\u0131 ekle\n    }\n\n    # CSS ve JavaScript dosyalar\u0131 i\u00e7in \u00f6nbellekleme\n    location ~* \\.(css|js)$ {\n        expires 7d; # 7 g\u00fcn boyunca \u00f6nbelle\u011fe al\n        add_header Cache-Control \"public, max-age=604800\";\n        add_header ETag on;\n        add_header Vary \"Accept-Encoding\";\n    }\n\n    # Fontlar i\u00e7in \u00f6nbellekleme\n    location ~* \\.(woff|woff2|ttf|otf|eot)$ {\n        expires 365d; # 1 y\u0131l boyunca \u00f6nbelle\u011fe al (fontlar nadiren de\u011fi\u015fir)\n        add_header Cache-Control \"public, max-age=31536000\";\n        add_header ETag on;\n        add_header Vary \"Accept-Encoding\";\n    }\n\n    # Di\u011fer statik dosyalar (\u00f6rne\u011fin PDF'ler)\n    location ~* \\.(pdf)$ {\n        expires 30d;\n        add_header Cache-Control \"public, max-age=2592000\";\n        add_header ETag on;\n        add_header Vary \"Accept-Encoding\";\n    }\n}<\/code><\/pre>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><\/p>\n<p><em>   <code>location ~<\/em> \\.(jpg|jpeg|gif|png|svg|ico)$<\/code>: Bu blok, <code>.jpg<\/code>, <code>.jpeg<\/code>, <code>.gif<\/code> gibi resim dosyas\u0131 uzant\u0131lar\u0131na sahip t\u00fcm isteklere uygulan\u0131r. <code>~*<\/code> b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyars\u0131z e\u015fle\u015fme yapar.<br \/>\n*   <code>expires 30d;<\/code>: Bu direktif, taray\u0131c\u0131ya bu dosyalar\u0131n 30 g\u00fcn boyunca ge\u00e7erli oldu\u011funu bildirir. Nginx, otomatik olarak <code>Cache-Control: public, max-age=2592000<\/code> (30 g\u00fcn = 2592000 saniye) ve <code>Expires<\/code> ba\u015fl\u0131klar\u0131n\u0131 ekleyecektir.<br \/>\n*   <code>add_header Cache-Control \"public, max-age=2592000\";<\/code>: <code>expires<\/code> direktifi genellikle yeterli olsa da, <code>add_header<\/code> ile <code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 manuel olarak eklemek, daha fazla kontrol sa\u011flar veya <code>expires<\/code>&#8216;\u0131n varsay\u0131lan davran\u0131\u015f\u0131n\u0131 ge\u00e7ersiz k\u0131lmak istedi\u011finizde kullan\u0131labilir. Burada, <code>expires<\/code> ile ayn\u0131 de\u011feri tekrar belirtmek yerine, <code>immutable<\/code> gibi ek y\u00f6nergeler ekleyebilirsiniz.<br \/>\n*   <code>add_header ETag on;<\/code>: Nginx varsay\u0131lan olarak ETag&#8217;i a\u00e7sa da, bu \u015fekilde a\u00e7\u0131k\u00e7a belirtmek iyi bir pratiktir.<br \/>\n*   <code>add_header Vary \"Accept-Encoding\";<\/code>: Bu ba\u015fl\u0131k, taray\u0131c\u0131ya (veya proxy&#8217;lere), sunucunun <code>Accept-Encoding<\/code> ba\u015fl\u0131\u011f\u0131na (\u00f6rne\u011fin <code>gzip<\/code> deste\u011fi) ba\u011fl\u0131 olarak farkl\u0131 bir yan\u0131t g\u00f6nderebilece\u011fini bildirir. Bu, s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f ve s\u0131k\u0131\u015ft\u0131r\u0131lmam\u0131\u015f i\u00e7eriklerin do\u011fru \u015fekilde \u00f6nbelle\u011fe al\u0131nmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>\u00d6nemli Not:<\/strong> <code>expires<\/code> direktifi, <code>add_header Cache-Control<\/code> direktifiyle \u00e7ak\u0131\u015fabilir. E\u011fer <code>expires<\/code> kullan\u0131yorsan\u0131z, <code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 manuel olarak eklemeniz genellikle gereksizdir, \u00e7\u00fcnk\u00fc <code>expires<\/code> zaten <code>public, max-age<\/code> de\u011ferini ayarlar. Ancak <code>no-cache<\/code>, <code>no-store<\/code>, <code>immutable<\/code> gibi ek y\u00f6nergeler eklemek isterseniz, <code>add_header<\/code> kullanman\u0131z gerekir. Bu durumda, <code>expires<\/code> direktifinin ayarlad\u0131\u011f\u0131 <code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131, <code>add_header<\/code> direktifinin ayarlad\u0131\u011f\u0131 ba\u015fl\u0131k ile birle\u015fmez; <code>add_header<\/code> direktifi <code>expires<\/code> taraf\u0131ndan ayarlanan ba\u015fl\u0131\u011f\u0131 ge\u00e7ersiz k\u0131lar veya \u00fczerine yazar. En iyi uygulama, <code>expires<\/code> ile <code>max-age<\/code> ve <code>public<\/code> ayarlay\u0131p, ek y\u00f6nergeler i\u00e7in <code>add_header Cache-Control<\/code> kullanmakt\u0131r.<\/p>\n<p>\u00d6rne\u011fin, <code>immutable<\/code> eklemek isterseniz:<\/p>\n<pre><code class=\"language-nginx\">location ~* \\.(css|js)$ {\n        expires 365d; # Bu, Cache-Control: public, max-age=31536000 ayarlar\n        add_header Cache-Control \"public, max-age=31536000, immutable\"; # expires taraf\u0131ndan ayarlanan\u0131 ge\u00e7ersiz k\u0131lar ve immutable ekler\n        add_header ETag on;\n        add_header Vary \"Accept-Encoding\";\n    }<\/code><\/pre>\n<p>Burada <code>expires<\/code> direktifi hala <code>Expires<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 ayarlamak i\u00e7in faydal\u0131d\u0131r.<\/p>\n<h4>Ad\u0131m 4: Dinamik \u0130\u00e7erik \u0130\u00e7in \u00d6nbellekleme Stratejileri<\/h4>\n<p>Dinamik i\u00e7erik (veritaban\u0131ndan \u00e7ekilen veya kullan\u0131c\u0131ya \u00f6zel olu\u015fturulan sayfalar) genellikle taray\u0131c\u0131 taraf\u0131nda \u00f6nbelle\u011fe al\u0131nmamal\u0131d\u0131r veya \u00e7ok k\u0131sa s\u00fcreli \u00f6nbelle\u011fe al\u0131nmal\u0131d\u0131r. Aksi takdirde, kullan\u0131c\u0131lar eski veya yanl\u0131\u015f bilgi g\u00f6rebilirler.<\/p>\n<p>Dinamik i\u00e7erik i\u00e7in \u00f6nbellekleme genellikle sunucu taraf\u0131nda (\u00f6rne\u011fin Nginx FastCGI \u00f6nbelle\u011fi, proxy \u00f6nbelle\u011fi veya uygulama d\u00fczeyinde \u00f6nbellekleme) yap\u0131l\u0131r. Ancak taray\u0131c\u0131ya, bu t\u00fcr i\u00e7eri\u011fi \u00f6nbelle\u011fe almamas\u0131 gerekti\u011fini bildirmeliyiz.<\/p>\n<pre><code class=\"language-nginx\"># PHP dosyalar\u0131 gibi dinamik i\u00e7erik i\u00e7in (FastCGI\/Proxy Pass kullan\u0131yorsan\u0131z)\n    location ~ \\.php$ {\n        # fastcgi_pass php-fpm; # PHP-FPM yap\u0131land\u0131rman\u0131z\n        # include fastcgi_params;\n\n        expires off; # Expires ba\u015fl\u0131\u011f\u0131n\u0131 kapat\n        add_header Cache-Control \"no-cache, no-store, must-revalidate\"; # Taray\u0131c\u0131n\u0131n \u00f6nbelle\u011fe almamas\u0131n\u0131 sa\u011flar\n        add_header Pragma \"no-cache\"; # Geriye d\u00f6n\u00fck uyumluluk i\u00e7in HTTP\/1.0\n        add_header Expires \"0\"; # Geriye d\u00f6n\u00fck uyumluluk i\u00e7in\n    }\n\n    # Genel olarak dinamik HTML sayfalar\u0131 i\u00e7in\n    location \/ {\n        # try_files $uri $uri\/ =404; # E\u011fer ana k\u00f6k dizin dinamik i\u00e7erik sunuyorsa\n        # proxy_pass http:\/\/backend_app; # \u00d6rne\u011fin bir Node.js veya Python uygulamas\u0131\n        expires off;\n        add_header Cache-Control \"no-cache, no-store, must-revalidate\";\n        add_header Pragma \"no-cache\";\n        add_header Expires \"0\";\n    }<\/code><\/pre>\n<p><strong>A\u00e7\u0131klamalar:<\/strong><\/p>\n<p>*   <code>expires off;<\/code>: <code>Expires<\/code> ba\u015fl\u0131\u011f\u0131n\u0131n g\u00f6nderilmesini devre d\u0131\u015f\u0131 b\u0131rak\u0131r.<br \/>\n*   <code>add_header Cache-Control \"no-cache, no-store, must-revalidate\";<\/code>: Bu, taray\u0131c\u0131ya i\u00e7eri\u011fi \u00f6nbelle\u011fe almamas\u0131n\u0131 (<code>no-store<\/code>) veya her istekte sunucuyla yeniden do\u011frulamas\u0131n\u0131 (<code>no-cache<\/code>, <code>must-revalidate<\/code>) s\u00f6yler.<br \/>\n*   <code>add_header Pragma \"no-cache\";<\/code>: HTTP\/1.0 istemcileri i\u00e7in geriye d\u00f6n\u00fck uyumluluk sa\u011flar.<br \/>\n*   <code>add_header Expires \"0\";<\/code>: <code>Expires<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 ge\u00e7mi\u015f bir tarihe ayarlayarak i\u00e7eri\u011fin hemen s\u00fcresinin doldu\u011funu bildirir.<\/p>\n<p>Bu ayarlar, taray\u0131c\u0131n\u0131n dinamik i\u00e7eri\u011fi yerel olarak depolamas\u0131n\u0131 engelleyerek her zaman en g\u00fcncel bilgiyi almas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Ad\u0131m 5: G\u00fcvenlik ve Di\u011fer Faydal\u0131 Ba\u015fl\u0131klar (Opsiyonel ama \u00d6nerilir)<\/h4>\n<p>Nginx&#8217;in <code>add_header<\/code> direktifini kullanarak sadece \u00f6nbellekleme de\u011fil, ayn\u0131 zamanda g\u00fcvenlik ve di\u011fer performansla ilgili ba\u015fl\u0131klar\u0131 da ekleyebilirsiniz.<\/p>\n<pre><code class=\"language-nginx\"># G\u00fcvenlik Ba\u015fl\u0131klar\u0131\n    add_header X-Frame-Options \"SAMEORIGIN\" always; # Clickjacking sald\u0131r\u0131lar\u0131n\u0131 \u00f6nler\n    add_header X-Content-Type-Options \"nosniff\" always; # Taray\u0131c\u0131n\u0131n MIME t\u00fcrlerini tahmin etmesini engeller\n    add_header X-XSS-Protection \"1; mode=block\" always; # XSS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma\n    add_header Referrer-Policy \"no-referrer-when-downgrade\" always; # Referrer bilgisini kontrol eder\n    add_header Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\" always; # HSTS (HTTPS'i zorunlu k\u0131lar)\n    add_header Content-Security-Policy \"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self';\" always; # CSP (\u0130\u00e7erik G\u00fcvenlik Politikas\u0131)<\/code><\/pre>\n<p><strong>Not:<\/strong> CSP ba\u015fl\u0131\u011f\u0131 olduk\u00e7a karma\u015f\u0131k olabilir ve dikkatli yap\u0131land\u0131r\u0131lmal\u0131d\u0131r, aksi takdirde sitenizin baz\u0131 i\u015flevlerini bozabilir.<\/p>\n<h4>Ad\u0131m 6: Yap\u0131land\u0131rmay\u0131 Test Etme ve Uygulama<\/h4>\n<p>Nginx yap\u0131land\u0131rman\u0131zda de\u011fi\u015fiklikler yapt\u0131ktan sonra, herhangi bir s\u00f6zdizimi hatas\u0131 olmad\u0131\u011f\u0131ndan emin olmak i\u00e7in her zaman test etmelisiniz:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t<\/code><\/pre>\n<p>E\u011fer <code>test is successful<\/code> mesaj\u0131n\u0131 g\u00f6r\u00fcrseniz, de\u011fi\u015fiklikleri uygulamak i\u00e7in Nginx servisini yeniden y\u00fckleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl reload nginx<\/code><\/pre>\n<p>Herhangi bir hata durumunda, Nginx hata g\u00fcnl\u00fcklerini (<code>\/var\/log\/nginx\/error.log<\/code>) kontrol ederek sorunu gidermeye \u00e7al\u0131\u015f\u0131n.<\/p>\n<h4>Ad\u0131m 7: Do\u011frulama<\/h4>\n<p>\u00d6nbellekleme ayarlar\u0131n\u0131z\u0131n do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in bir web taray\u0131c\u0131s\u0131n\u0131n geli\u015ftirici ara\u00e7lar\u0131n\u0131 (genellikle F12 tu\u015fu ile a\u00e7\u0131l\u0131r) kullanabilirsiniz.<\/p>\n<p>1.  Taray\u0131c\u0131n\u0131zda geli\u015ftirici ara\u00e7lar\u0131n\u0131 a\u00e7\u0131n.<br \/>\n2.  &#8220;Network&#8221; (A\u011f) sekmesine gidin.<br \/>\n3.  Sitenizi ziyaret edin ve sayfay\u0131 yenileyin (Ctrl+F5 veya Cmd+Shift+R ile tam yenileme yapmay\u0131n, sadece F5 veya Cmd+R ile normal yenileme yap\u0131n).<br \/>\n4.  Statik bir dosyaya (\u00f6rne\u011fin bir resim veya CSS dosyas\u0131) t\u0131klay\u0131n.<br \/>\n5.  &#8220;Headers&#8221; (Ba\u015fl\u0131klar) sekmesine bak\u0131n. Burada <code>Cache-Control<\/code>, <code>Expires<\/code>, <code>ETag<\/code>, <code>Last-Modified<\/code> ve <code>Vary<\/code> gibi ba\u015fl\u0131klar\u0131 g\u00f6rmelisiniz.<br \/>\n6.  Dosyan\u0131n <code>Status Code<\/code>&#8216;una dikkat edin. \u0130lk y\u00fcklemede <code>200 OK<\/code> olmal\u0131, ancak ikinci bir normal yenilemede (\u00f6nbellek hala ge\u00e7erliyse) <code>304 Not Modified<\/code> veya taray\u0131c\u0131n\u0131n \u00f6nbelle\u011finden y\u00fcklendi\u011fini belirten bir not g\u00f6rmelisiniz (\u00f6rne\u011fin Chrome&#8217;da <code>(from disk cache)<\/code> veya <code>(from memory cache)<\/code>).<\/p>\n<p>Bu, taray\u0131c\u0131n\u0131z\u0131n dosyalar\u0131 do\u011fru bir \u015fekilde \u00f6nbelle\u011fe ald\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<h3>Geli\u015fmi\u015f Konular ve En \u0130yi Uygulamalar<\/h3>\n<p>Taray\u0131c\u0131 \u00f6nbelleklemesi uygularken g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gereken baz\u0131 geli\u015fmi\u015f konular ve en iyi uygulamalar \u015funlard\u0131r:<\/p>\n<h4>1. Cache Busting (\u00d6nbellek Ge\u00e7ersiz K\u0131lma)<\/h4>\n<p>Agresif \u00f6nbellekleme statik dosyalar i\u00e7in harika olsa da, bu dosyalar\u0131 g\u00fcncelledi\u011finizde kullan\u0131c\u0131lar\u0131n eski s\u00fcr\u00fcmleri g\u00f6rmeye devam etmesi sorununa yol a\u00e7abilir. Cache busting, bu sorunu \u00e7\u00f6zmek i\u00e7in kullan\u0131l\u0131r. En yayg\u0131n y\u00f6ntemler:<\/p>\n<p>*   <strong>Sorgu Dizeleri:<\/strong> Dosya ad\u0131n\u0131n sonuna bir s\u00fcr\u00fcm numaras\u0131 eklemek. \u00d6rne\u011fin, <code>style.css?v=1.0<\/code> yerine <code>style.css?v=2.0<\/code>.<br \/>\n*   <strong>Dosya Ad\u0131 De\u011fi\u015fikli\u011fi (Fingerprinting):<\/strong> Dosyan\u0131n i\u00e7eri\u011finin hash de\u011ferini dosya ad\u0131na dahil etmek. \u00d6rne\u011fin, <code>style.css<\/code> yerine <code>style.2f3a7b8c.css<\/code>. Bu y\u00f6ntem, dosya i\u00e7eri\u011fi de\u011fi\u015fti\u011finde URL&#8217;nin de de\u011fi\u015fmesini garanti eder ve taray\u0131c\u0131y\u0131 yeni dosyay\u0131 indirmeye zorlar.<\/p>\n<h4>2. <code>immutable<\/code> Direktifi<\/h4>\n<p><code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131na <code>immutable<\/code> y\u00f6nergesini eklemek, taray\u0131c\u0131ya bir kayna\u011f\u0131n i\u00e7eri\u011finin URL&#8217;si de\u011fi\u015fmedik\u00e7e asla de\u011fi\u015fmeyece\u011fini bildirir. Bu, taray\u0131c\u0131n\u0131n \u00f6nbelle\u011fe al\u0131nan bir kayna\u011f\u0131 yeniden do\u011frulama gereksinimini tamamen ortadan kald\u0131r\u0131r. <code>max-age<\/code> s\u00fcresi dolana kadar sunucuya hi\u00e7bir istek g\u00f6nderilmez. Bu, \u00f6zellikle cache busting ile birlikte kullan\u0131ld\u0131\u011f\u0131nda (yani dosya ad\u0131 de\u011fi\u015fti\u011finde yeni bir URL olu\u015ftu\u011funda) \u00e7ok g\u00fc\u00e7l\u00fcd\u00fcr.<\/p>\n<pre><code class=\"language-nginx\">add_header Cache-Control \"public, max-age=31536000, immutable\";<\/code><\/pre>\n<p>Bu, sadece modern taray\u0131c\u0131lar taraf\u0131ndan desteklenir, ancak performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir.<\/p>\n<h4>3. CDN (\u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011f\u0131) Kullan\u0131m\u0131<\/h4>\n<p>CDN&#8217;ler, statik dosyalar\u0131n\u0131z\u0131 d\u00fcnyan\u0131n d\u00f6rt bir yan\u0131ndaki sunucularda \u00f6nbelle\u011fe alarak kullan\u0131c\u0131ya co\u011frafi olarak daha yak\u0131n bir noktadan hizmet verir. Nginx&#8217;te ayarlad\u0131\u011f\u0131n\u0131z \u00f6nbellekleme ba\u015fl\u0131klar\u0131, CDN&#8217;lerin de i\u00e7eri\u011fi ne kadar s\u00fcreyle \u00f6nbelle\u011fe alaca\u011f\u0131n\u0131 belirler. Bu nedenle, Nginx yap\u0131land\u0131rman\u0131zdaki ba\u015fl\u0131klar, hem taray\u0131c\u0131lar hem de CDN&#8217;ler i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h4>4. Gzip S\u0131k\u0131\u015ft\u0131rmas\u0131<\/h4>\n<p>\u00d6nbelleklemenin yan\u0131 s\u0131ra, Nginx&#8217;in <code>ngx_http_gzip_module<\/code> ile Gzip s\u0131k\u0131\u015ft\u0131rmas\u0131n\u0131 etkinle\u015ftirmek, transfer edilen veri miktar\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azaltarak sayfa y\u00fckleme s\u00fcrelerini daha da h\u0131zland\u0131r\u0131r. <code>Vary: Accept-Encoding<\/code> ba\u015fl\u0131\u011f\u0131, s\u0131k\u0131\u015ft\u0131rma ile birlikte kullan\u0131ld\u0131\u011f\u0131nda \u00e7ok \u00f6nemlidir.<\/p>\n<pre><code class=\"language-nginx\"># nginx.conf veya http blo\u011funda\ngzip on;\ngzip_vary on;\ngzip_proxied any;\ngzip_comp_level 6;\ngzip_buffers 16 8k;\ngzip_http_version 1.1;\ngzip_types text\/plain text\/css application\/json application\/javascript text\/xml application\/xml application\/xml+rss text\/javascript;<\/code><\/pre>\n<h3>Sorun Giderme<\/h3>\n<p>*   <strong>Ba\u015fl\u0131klar G\u00f6r\u00fcnm\u00fcyor:<\/strong><br \/>\n    *   Nginx yap\u0131land\u0131rmas\u0131n\u0131 do\u011fru dosyaya m\u0131 yazd\u0131n\u0131z?<br \/>\n    *   <code>nginx -t<\/code> ile yap\u0131land\u0131rmay\u0131 kontrol ettiniz mi?<br \/>\n    *   <code>sudo systemctl reload nginx<\/code> komutuyla Nginx&#8217;i yeniden y\u00fcklediniz mi?<br \/>\n    *   Taray\u0131c\u0131n\u0131z\u0131n geli\u015ftirici ara\u00e7lar\u0131nda &#8220;Disable cache&#8221; (\u00d6nbelle\u011fi devre d\u0131\u015f\u0131 b\u0131rak) se\u00e7ene\u011finin i\u015faretli olmad\u0131\u011f\u0131ndan emin olun.<br \/>\n*   <strong><code>304 Not Modified<\/code> veya <code>(from disk cache)<\/code> gelmiyor:<\/strong><br \/>\n    *   <code>expires<\/code> s\u00fcresi dolmu\u015f olabilir.<br \/>\n    *   <code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131n\u0131z <code>no-cache<\/code> veya <code>no-store<\/code> i\u00e7eriyor olabilir.<br \/>\n    *   <code>ETag<\/code> veya <code>Last-Modified<\/code> ba\u015fl\u0131klar\u0131 eksik olabilir (Nginx statik dosyalar i\u00e7in varsay\u0131lan olarak ekler, ancak <code>etag off;<\/code> ile kapatm\u0131\u015f olabilirsiniz).<br \/>\n*   <strong>Yanl\u0131\u015f dosyalar \u00f6nbelle\u011fe al\u0131n\u0131yor:<\/strong><br \/>\n    *   <code>location<\/code> bloklar\u0131n\u0131z\u0131n e\u015fle\u015fme d\u00fczenlerini kontrol edin. Nginx&#8217;in <code>location<\/code> bloklar\u0131 i\u015fleme s\u0131ras\u0131 \u00f6nemlidir. Daha spesifik kurallar daha genel kurallardan \u00f6nce gelmelidir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Nginx&#8217;in <code>http_headers_module<\/code> arac\u0131l\u0131\u011f\u0131yla taray\u0131c\u0131 \u00f6nbelleklemesi uygulamak, web sitenizin performans\u0131n\u0131 ve kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rman\u0131n etkili bir yoludur. HTTP \u00f6nbellekleme ba\u015fl\u0131klar\u0131n\u0131n (\u00f6zellikle <code>Cache-Control<\/code>, <code>Expires<\/code>, <code>ETag<\/code>, <code>Last-Modified<\/code> ve <code>Vary<\/code>) nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak ve Nginx&#8217;in <code>expires<\/code> ve <code>add_header<\/code> direktiflerini do\u011fru bir \u015fekilde yap\u0131land\u0131rmak, bu optimizasyonu ba\u015far\u0131yla uygulaman\u0131n anahtar\u0131d\u0131r.<\/p>\n<p>Statik dosyalar i\u00e7in agresif \u00f6nbellekleme ve dinamik i\u00e7erik i\u00e7in \u00f6nbelleklemenin devre d\u0131\u015f\u0131 b\u0131rak\u0131lmas\u0131 veya k\u0131sa s\u00fcreli olmas\u0131, genellikle en iyi sonu\u00e7lar\u0131 verir. Cache busting ve <code>immutable<\/code> gibi geli\u015fmi\u015f teknikleri kullanmak, sitenizin g\u00fcncellenmesini kolayla\u015ft\u0131r\u0131rken \u00f6nbellekleme avantajlar\u0131ndan tam olarak yararlanman\u0131z\u0131 sa\u011flar. Bu ad\u0131mlar\u0131 uygulayarak ve yap\u0131land\u0131rman\u0131z\u0131 d\u00fczenli olarak test ederek, CentOS 8 \u00fczerindeki Nginx sunucunuzun web performans\u0131n\u0131 zirveye ta\u015f\u0131yabilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Nginx&#8217;in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8)\nWeb performans\u0131, modern internet deneyiminin temel ta\u015flar\u0131ndan","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[241],"tags":[],"class_list":{"0":"post-36454","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-linux","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Nginx&#039;in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Nginx&#039;in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8)\" \/>\n<meta property=\"og:description\" content=\"Nginx&#039;in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8) Web performans\u0131, modern internet deneyiminin temel ta\u015flar\u0131ndan\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-17T21:40:53+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Nginx&#8217;in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8)\",\"datePublished\":\"2025-12-17T21:40:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/\"},\"wordCount\":2809,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Linux\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/\",\"name\":\"Nginx'in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-17T21:40:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nginx&#8217;in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Nginx'in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/","og_locale":"tr_TR","og_type":"article","og_title":"Nginx'in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8)","og_description":"Nginx'in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8) Web performans\u0131, modern internet deneyiminin temel ta\u015flar\u0131ndan","og_url":"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-17T21:40:53+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Nginx&#8217;in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8)","datePublished":"2025-12-17T21:40:53+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/"},"wordCount":2809,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Linux"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/","url":"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/","name":"Nginx'in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-17T21:40:53+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/nginxin-header-modulu-ile-tarayici-onbellekleme-nasil-uygulanir-centos-8\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Nginx&#8217;in Header Mod\u00fcl\u00fc ile Taray\u0131c\u0131 \u00d6nbellekleme Nas\u0131l Uygulan\u0131r? (CentOS 8)"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=36454"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36454\/revisions"}],"predecessor-version":[{"id":36455,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36454\/revisions\/36455"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}