Takip et

Nginx’in Header Modülü ile Tarayıcı Önbellekleme Nasıl Uygulanır? (CentOS 8)

Nginx’in Header Modülü ile Tarayıcı Önbellekleme Nasıl Uygulanır? (CentOS 8) Web performansı, modern internet deneyiminin temel taşlarından

Nginx’in Header Modülü ile Tarayıcı Önbellekleme Nasıl Uygulanır? (CentOS 8)

Web performansı, modern internet deneyiminin temel taşlarından biridir. Kullanıcılar hızlı yüklenen web siteleri beklerken, sunucu kaynakları da verimli kullanılmalıdır. Tarayıcı önbellekleme (Browser Caching), bu iki hedefe ulaşmak için en etkili yöntemlerden biridir. Bu teknik makalede, güçlü ve popüler bir web sunucusu olan Nginx’i CentOS 8 işletim sistemi üzerinde kullanarak tarayıcı önbelleklemenin nasıl uygulanacağını, HTTP önbellekleme başlıklarının derinlemesine anlaşılması ve Nginx’in http_headers_module tarafından sağlanan direktiflerin pratik uygulamalarıyla adım adım açıklayacağız.

Giriş: Tarayıcı Önbellekleme ve Önemi

Tarayıcı önbellekleme, bir web sitesini ziyaret ettiğinizde tarayıcınızın (Chrome, Firefox, Safari vb.) web sunucusundan aldığı bazı dosyaları (resimler, CSS dosyaları, JavaScript dosyaları, fontlar vb.) yerel olarak depolaması işlemidir. Bir sonraki aynı web sitesi ziyaretinizde veya aynı kaynaklara ihtiyaç duyan başka bir sayfaya geçtiğinizde, tarayıcı bu dosyaları tekrar sunucudan indirmek yerine kendi yerel önbelleğinden yükler.

Bu yaklaşımın birçok önemli faydası vardır:

* Daha Hızlı Yükleme Süreleri: Kullanıcılar için web sayfaları çok daha hızlı yüklenir, bu da daha iyi bir kullanıcı deneyimi sağlar.
* Daha Az Sunucu Yükü: Sunucunun her istekte aynı statik dosyaları tekrar tekrar göndermesi gerekmez, bu da sunucu kaynaklarının (bant genişliği, CPU) daha verimli kullanılmasına olanak tanır.
* Daha Az Bant Genişliği Kullanımı: Hem sunucu hem de istemci tarafında veri transferi azalır, bu da özellikle mobil kullanıcılar için maliyet avantajı sağlayabilir.
* SEO İyileştirmesi: Arama motorları, hızlı yüklenen siteleri tercih eder. Tarayıcı önbellekleme, sitenizin SEO sıralamasını dolaylı olarak iyileştirebilir.

Nginx, esnek yapılandırma seçenekleri ve yüksek performansı sayesinde tarayıcı önbelleklemesini uygulamak için mükemmel bir araçtır. Özellikle http_headers_module (genellikle varsayılan olarak derlenmiş gelir) aracılığıyla HTTP başlıklarını yönetme yeteneği, önbellekleme stratejilerini hassas bir şekilde kontrol etmemizi sağlar.

Önkoşullar

Bu makaledeki adımları uygulayabilmek için aşağıdaki önkoşullara sahip olmanız gerekmektedir:

* CentOS 8 işletim sistemi yüklü bir sunucu.
* sudo yetkilerine sahip bir kullanıcı hesabı.
* Nginx web sunucusu yüklü ve çalışır durumda olmalıdır. Eğer yüklü değilse, kurulum adımları aşağıda kısaca açıklanacaktır.
* Temel Linux komut satırı bilgisi.

HTTP Önbellekleme Başlıklarını Anlamak

Tarayıcı önbelleklemesi, HTTP protokolünün bir parçası olan belirli başlıklar aracılığıyla yönetilir. Bu başlıklar, sunucunun tarayıcıya bir kaynağı ne kadar süreyle önbelleğe alması gerektiğini, ne zaman yeniden doğrulama yapması gerektiğini ve önbelleğe alınıp alınmayacağını bildirir.

1. Cache-Control

Cache-Control başlığı, HTTP/1.1’in en güçlü ve esnek önbellekleme mekanizmasıdır. Bir kaynağın nasıl önbelleğe alınacağını ve önbelleğin davranışını kontrol etmek için bir dizi yönerge içerir:

* max-age=: Kaynağın sunucuya yeniden doğrulama yapmadan önce ne kadar süreyle önbellekte geçerli kalacağını saniye cinsinden belirtir. Örneğin, max-age=3600 bir saat boyunca önbelleğe alınması gerektiğini söyler.
* no-cache: Tarayıcıya, kaynağı her kullanmadan önce sunucuyla yeniden doğrulamasını söyler. Kaynak değişmemişse 304 Not Modified yanıtı alınır ve önbellekteki sürüm kullanılır.
* no-store: Kaynağın hiçbir koşulda önbelleğe alınmaması gerektiğini belirtir. Hassas bilgiler için kullanılır.
* public: Yanıtın herhangi bir önbellek (tarayıcı, proxy sunucusu vb.) tarafından önbelleğe alınabileceğini belirtir.
* private: Yanıtın yalnızca istemci tarayıcısı tarafından önbelleğe alınabileceğini, paylaşılan önbellekler (proxy sunucuları gibi) tarafından alınmaması gerektiğini belirtir. Genellikle kullanıcıya özel içerikler için kullanılır.
* must-revalidate: Önbelleğin süresi dolduğunda (max-age bittiğinde), tarayıcının kaynağı kullanmadan önce sunucuyla yeniden doğrulamasını zorunlu kılar.
* proxy-revalidate: must-revalidate ile benzerdir, ancak yalnızca paylaşılan önbellekler (proxy’ler) için geçerlidir.

Örnek: Cache-Control: public, max-age=31536000, immutable (Bir yıl boyunca genel olarak önbelleğe alınabilir ve değişmez kabul edilebilir).

2. Expires

Expires başlığı, HTTP/1.0’dan kalma eski bir başlıktır ve bir kaynağın belirli bir tarih ve saate kadar geçerli olduğunu belirtir. Cache-Control: max-age ile birlikte kullanıldığında, max-age daha yüksek önceliğe sahiptir. Modern uygulamalarda genellikle Cache-Control tercih edilir, ancak geriye dönük uyumluluk için hala faydalıdır.

Örnek: Expires: Thu, 01 Jan 2025 00:00:00 GMT

3. ETag (Entity Tag)

ETag, bir kaynağın belirli bir sürümünü temsil eden benzersiz bir tanımlayıcıdır (genellikle bir hash değeri). Tarayıcı bir kaynağı önbelleğe aldığında, ETag değerini de saklar. Bir sonraki istekte, tarayıcı sunucuya If-None-Match başlığı ile bu ETag değerini gönderir. Eğer sunucudaki kaynak değişmemişse, sunucu 304 Not Modified yanıtı döner ve tarayıcı önbellekteki sürümü kullanır. Bu, bant genişliğini korur ve sunucu yükünü azaltır.

Örnek: ETag: "5f3a7b8c-1a2b"

4. Last-Modified

Last-Modified başlığı, bir kaynağın son değiştirilme tarihini belirtir. ETag ile benzer şekilde, tarayıcı bu değeri önbelleğe alır ve bir sonraki istekte sunucuya If-Modified-Since başlığı ile gönderir. Eğer kaynak belirtilen tarihten sonra değişmemişse, sunucu 304 Not Modified yanıtı döner.

Örnek: Last-Modified: Wed, 18 Aug 2023 10:00:00 GMT

5. Vary

Vary başlığı, sunucuya, bir yanıtın içeriğinin hangi istek başlıklarına göre değişebileceğini bildirir. Örneğin, Vary: Accept-Encoding başlığı, sunucunun sıkıştırılmış (gzip) ve sıkıştırılmamış içerik için farklı yanıtlar gönderebileceğini ve bu nedenle önbelleklerin bu farklılıkları dikkate alması gerektiğini belirtir. Bu, tarayıcıların veya proxy’lerin aynı URL için farklı önbellek girişleri tutmasını sağlar.

Örnek: Vary: Accept-Encoding, User-Agent

Nginx’in Önbellekleme Direktifleri

Nginx, http_headers_module aracılığıyla bu HTTP önbellekleme başlıklarını yapılandırmak için güçlü direktifler sunar.

1. expires Direktifi

expires direktifi, Cache-Control: max-age ve Expires başlıklarını otomatik olarak ayarlamanın en basit yoludur. Özellikle statik dosyalar için çok kullanışlıdır.

* Sözdizimi: expires [off|epoch|max|time];
* Örnekler:
* expires 1h; (1 saat önbelleğe al)
* expires 30d; (30 gün önbelleğe al)
* expires -1; (Hemen süresi dolmuş olarak işaretle, Cache-Control: no-cache veya no-store ile birlikte kullanılabilir)
* expires epoch; (1 Ocak 1970’e ayarlar, Expires başlığı için eski bir yöntem)
* expires max; (Maksimum mümkün olan değeri ayarlar)
* expires off; (Önbellekleme başlıklarını kapatır)

expires direktifi, Cache-Control başlığını public, max-age= olarak ve Expires başlığını belirtilen süreye göre ayarlar.

2. add_header Direktifi

add_header direktifi, yanıt başlıklarına herhangi bir özel HTTP başlığı eklemek için kullanılır. Bu, Cache-Control‘un daha spesifik yönergelerini (örneğin no-store, must-revalidate, immutable) veya diğer önbellekleme başlıklarını (örneğin Vary) manuel olarak ayarlamak için idealdir.

* Sözdizimi: add_header name value [always];
* Örnekler:
* add_header Cache-Control "no-cache, no-store, must-revalidate";
* add_header Vary "Accept-Encoding";
* add_header X-Custom-Header "My Value";

always parametresi, yanıt kodu 200, 201, 204, 206, 301, 302, 303, 304 veya 307 olmasa bile başlığın eklenmesini sağlar.

3. etag Direktifi

Nginx, statik dosyalar için varsayılan olarak ETag başlığını otomatik olarak oluşturur ve gönderir. Ancak bu davranışı kontrol etmek mümkündür.

* Sözdizimi: etag on | off;
* Örnek: etag on; (Genellikle varsayılan olarak açıktır.)

CentOS 8 Üzerinde Nginx ile Tarayıcı Önbellekleme Uygulama Adımları

Şimdi, teorik bilgileri pratik adımlara dökelim.

Adım 1: Nginx Kurulumu (Gerekirse)

Eğer Nginx sunucunuz CentOS 8 üzerinde kurulu değilse, aşağıdaki komutları kullanarak kurabilirsiniz:

sudo dnf update -y
sudo dnf install nginx -y
sudo systemctl enable --now nginx
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Bu komutlar, Nginx’i kurar, sistem başlangıcında otomatik başlamasını sağlar, Nginx servisini başlatır ve güvenlik duvarında HTTP/HTTPS trafiğine izin verir.

Adım 2: Temel Nginx Yapılandırması

Nginx yapılandırma dosyaları genellikle /etc/nginx/ dizininde bulunur. Ana yapılandırma dosyası /etc/nginx/nginx.conf‘tur. Çoğu durumda, siteye özel yapılandırmalar /etc/nginx/conf.d/ dizinindeki .conf uzantılı dosyalara yazılır. Bu, yapılandırmayı daha düzenli tutar.

Örneğin, example.com.conf adında bir dosya oluşturabilirsiniz:

sudo nano /etc/nginx/conf.d/example.com.conf

İçerisine temel bir server bloğu ekleyelim:

server {
    listen 80;
    server_name example.com www.example.com;
    root /usr/share/nginx/html; # Statik dosyalarınızın bulunduğu kök dizin
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # Diğer yapılandırmalar buraya gelecek
}

Adım 3: Statik Dosyalar İçin Önbellekleme Uygulaması

Statik dosyalar (resimler, CSS, JavaScript, fontlar vb.) nadiren değiştiği için agresif bir şekilde önbelleğe alınabilirler. Bu, tarayıcı önbelleklemesinin en büyük faydalarını sağladığı alandır.

server bloğunuzun içine veya ayrı bir location bloğu içinde statik dosyalar için önbellekleme kurallarını tanımlayacağız.

server {
    listen 80;
    server_name example.com www.example.com;
    root /usr/share/nginx/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # Resimler için önbellekleme
    location ~* \.(jpg|jpeg|gif|png|svg|ico)$ {
        expires 30d; # 30 gün boyunca önbelleğe al
        add_header Cache-Control "public, max-age=2592000"; # Açıkça belirtmek için
        add_header ETag on; # ETag'i etkinleştir (genellikle varsayılan olarak açık)
        add_header Vary "Accept-Encoding"; # Sıkıştırma için vary başlığı ekle
    }

    # CSS ve JavaScript dosyaları için önbellekleme
    location ~* \.(css|js)$ {
        expires 7d; # 7 gün boyunca önbelleğe al
        add_header Cache-Control "public, max-age=604800";
        add_header ETag on;
        add_header Vary "Accept-Encoding";
    }

    # Fontlar için önbellekleme
    location ~* \.(woff|woff2|ttf|otf|eot)$ {
        expires 365d; # 1 yıl boyunca önbelleğe al (fontlar nadiren değişir)
        add_header Cache-Control "public, max-age=31536000";
        add_header ETag on;
        add_header Vary "Accept-Encoding";
    }

    # Diğer statik dosyalar (örneğin PDF'ler)
    location ~* \.(pdf)$ {
        expires 30d;
        add_header Cache-Control "public, max-age=2592000";
        add_header ETag on;
        add_header Vary "Accept-Encoding";
    }
}

Açıklamalar:

location ~ \.(jpg|jpeg|gif|png|svg|ico)$: Bu blok, .jpg, .jpeg, .gif gibi resim dosyası uzantılarına sahip tüm isteklere uygulanır. ~* büyük/küçük harf duyarsız eşleşme yapar.
* expires 30d;: Bu direktif, tarayıcıya bu dosyaların 30 gün boyunca geçerli olduğunu bildirir. Nginx, otomatik olarak Cache-Control: public, max-age=2592000 (30 gün = 2592000 saniye) ve Expires başlıklarını ekleyecektir.
* add_header Cache-Control "public, max-age=2592000";: expires direktifi genellikle yeterli olsa da, add_header ile Cache-Control başlığını manuel olarak eklemek, daha fazla kontrol sağlar veya expires‘ın varsayılan davranışını geçersiz kılmak istediğinizde kullanılabilir. Burada, expires ile aynı değeri tekrar belirtmek yerine, immutable gibi ek yönergeler ekleyebilirsiniz.
* add_header ETag on;: Nginx varsayılan olarak ETag’i açsa da, bu şekilde açıkça belirtmek iyi bir pratiktir.
* add_header Vary "Accept-Encoding";: Bu başlık, tarayıcıya (veya proxy’lere), sunucunun Accept-Encoding başlığına (örneğin gzip desteği) bağlı olarak farklı bir yanıt gönderebileceğini bildirir. Bu, sıkıştırılmış ve sıkıştırılmamış içeriklerin doğru şekilde önbelleğe alınmasını sağlar.

Önemli Not: expires direktifi, add_header Cache-Control direktifiyle çakışabilir. Eğer expires kullanıyorsanız, Cache-Control başlığını manuel olarak eklemeniz genellikle gereksizdir, çünkü expires zaten public, max-age değerini ayarlar. Ancak no-cache, no-store, immutable gibi ek yönergeler eklemek isterseniz, add_header kullanmanız gerekir. Bu durumda, expires direktifinin ayarladığı Cache-Control başlığı, add_header direktifinin ayarladığı başlık ile birleşmez; add_header direktifi expires tarafından ayarlanan başlığı geçersiz kılar veya üzerine yazar. En iyi uygulama, expires ile max-age ve public ayarlayıp, ek yönergeler için add_header Cache-Control kullanmaktır.

Örneğin, immutable eklemek isterseniz:

location ~* \.(css|js)$ {
        expires 365d; # Bu, Cache-Control: public, max-age=31536000 ayarlar
        add_header Cache-Control "public, max-age=31536000, immutable"; # expires tarafından ayarlananı geçersiz kılar ve immutable ekler
        add_header ETag on;
        add_header Vary "Accept-Encoding";
    }

Burada expires direktifi hala Expires başlığını ayarlamak için faydalıdır.

Adım 4: Dinamik İçerik İçin Önbellekleme Stratejileri

Dinamik içerik (veritabanından çekilen veya kullanıcıya özel oluşturulan sayfalar) genellikle tarayıcı tarafında önbelleğe alınmamalıdır veya çok kısa süreli önbelleğe alınmalıdır. Aksi takdirde, kullanıcılar eski veya yanlış bilgi görebilirler.

Dinamik içerik için önbellekleme genellikle sunucu tarafında (örneğin Nginx FastCGI önbelleği, proxy önbelleği veya uygulama düzeyinde önbellekleme) yapılır. Ancak tarayıcıya, bu tür içeriği önbelleğe almaması gerektiğini bildirmeliyiz.

# PHP dosyaları gibi dinamik içerik için (FastCGI/Proxy Pass kullanıyorsanız)
    location ~ \.php$ {
        # fastcgi_pass php-fpm; # PHP-FPM yapılandırmanız
        # include fastcgi_params;

        expires off; # Expires başlığını kapat
        add_header Cache-Control "no-cache, no-store, must-revalidate"; # Tarayıcının önbelleğe almamasını sağlar
        add_header Pragma "no-cache"; # Geriye dönük uyumluluk için HTTP/1.0
        add_header Expires "0"; # Geriye dönük uyumluluk için
    }

    # Genel olarak dinamik HTML sayfaları için
    location / {
        # try_files $uri $uri/ =404; # Eğer ana kök dizin dinamik içerik sunuyorsa
        # proxy_pass http://backend_app; # Örneğin bir Node.js veya Python uygulaması
        expires off;
        add_header Cache-Control "no-cache, no-store, must-revalidate";
        add_header Pragma "no-cache";
        add_header Expires "0";
    }

Açıklamalar:

* expires off;: Expires başlığının gönderilmesini devre dışı bırakır.
* add_header Cache-Control "no-cache, no-store, must-revalidate";: Bu, tarayıcıya içeriği önbelleğe almamasını (no-store) veya her istekte sunucuyla yeniden doğrulamasını (no-cache, must-revalidate) söyler.
* add_header Pragma "no-cache";: HTTP/1.0 istemcileri için geriye dönük uyumluluk sağlar.
* add_header Expires "0";: Expires başlığını geçmiş bir tarihe ayarlayarak içeriğin hemen süresinin dolduğunu bildirir.

Bu ayarlar, tarayıcının dinamik içeriği yerel olarak depolamasını engelleyerek her zaman en güncel bilgiyi almasını sağlar.

Adım 5: Güvenlik ve Diğer Faydalı Başlıklar (Opsiyonel ama Önerilir)

Nginx’in add_header direktifini kullanarak sadece önbellekleme değil, aynı zamanda güvenlik ve diğer performansla ilgili başlıkları da ekleyebilirsiniz.

# Güvenlik Başlıkları
    add_header X-Frame-Options "SAMEORIGIN" always; # Clickjacking saldırılarını önler
    add_header X-Content-Type-Options "nosniff" always; # Tarayıcının MIME türlerini tahmin etmesini engeller
    add_header X-XSS-Protection "1; mode=block" always; # XSS saldırılarına karşı koruma
    add_header Referrer-Policy "no-referrer-when-downgrade" always; # Referrer bilgisini kontrol eder
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; # HSTS (HTTPS'i zorunlu kılar)
    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 (İçerik Güvenlik Politikası)

Not: CSP başlığı oldukça karmaşık olabilir ve dikkatli yapılandırılmalıdır, aksi takdirde sitenizin bazı işlevlerini bozabilir.

Adım 6: Yapılandırmayı Test Etme ve Uygulama

Nginx yapılandırmanızda değişiklikler yaptıktan sonra, herhangi bir sözdizimi hatası olmadığından emin olmak için her zaman test etmelisiniz:

sudo nginx -t

Eğer test is successful mesajını görürseniz, değişiklikleri uygulamak için Nginx servisini yeniden yükleyebilirsiniz:

sudo systemctl reload nginx

Herhangi bir hata durumunda, Nginx hata günlüklerini (/var/log/nginx/error.log) kontrol ederek sorunu gidermeye çalışın.

Adım 7: Doğrulama

Önbellekleme ayarlarınızın doğru çalıştığını doğrulamak için bir web tarayıcısının geliştirici araçlarını (genellikle F12 tuşu ile açılır) kullanabilirsiniz.

1. Tarayıcınızda geliştirici araçlarını açın.
2. “Network” (Ağ) sekmesine gidin.
3. Sitenizi ziyaret edin ve sayfayı yenileyin (Ctrl+F5 veya Cmd+Shift+R ile tam yenileme yapmayın, sadece F5 veya Cmd+R ile normal yenileme yapın).
4. Statik bir dosyaya (örneğin bir resim veya CSS dosyası) tıklayın.
5. “Headers” (Başlıklar) sekmesine bakın. Burada Cache-Control, Expires, ETag, Last-Modified ve Vary gibi başlıkları görmelisiniz.
6. Dosyanın Status Code‘una dikkat edin. İlk yüklemede 200 OK olmalı, ancak ikinci bir normal yenilemede (önbellek hala geçerliyse) 304 Not Modified veya tarayıcının önbelleğinden yüklendiğini belirten bir not görmelisiniz (örneğin Chrome’da (from disk cache) veya (from memory cache)).

Bu, tarayıcınızın dosyaları doğru bir şekilde önbelleğe aldığını gösterir.

Gelişmiş Konular ve En İyi Uygulamalar

Tarayıcı önbelleklemesi uygularken göz önünde bulundurmanız gereken bazı gelişmiş konular ve en iyi uygulamalar şunlardır:

1. Cache Busting (Önbellek Geçersiz Kılma)

Agresif önbellekleme statik dosyalar için harika olsa da, bu dosyaları güncellediğinizde kullanıcıların eski sürümleri görmeye devam etmesi sorununa yol açabilir. Cache busting, bu sorunu çözmek için kullanılır. En yaygın yöntemler:

* Sorgu Dizeleri: Dosya adının sonuna bir sürüm numarası eklemek. Örneğin, style.css?v=1.0 yerine style.css?v=2.0.
* Dosya Adı Değişikliği (Fingerprinting): Dosyanın içeriğinin hash değerini dosya adına dahil etmek. Örneğin, style.css yerine style.2f3a7b8c.css. Bu yöntem, dosya içeriği değiştiğinde URL’nin de değişmesini garanti eder ve tarayıcıyı yeni dosyayı indirmeye zorlar.

2. immutable Direktifi

Cache-Control başlığına immutable yönergesini eklemek, tarayıcıya bir kaynağın içeriğinin URL’si değişmedikçe asla değişmeyeceğini bildirir. Bu, tarayıcının önbelleğe alınan bir kaynağı yeniden doğrulama gereksinimini tamamen ortadan kaldırır. max-age süresi dolana kadar sunucuya hiçbir istek gönderilmez. Bu, özellikle cache busting ile birlikte kullanıldığında (yani dosya adı değiştiğinde yeni bir URL oluştuğunda) çok güçlüdür.

add_header Cache-Control "public, max-age=31536000, immutable";

Bu, sadece modern tarayıcılar tarafından desteklenir, ancak performansı önemli ölçüde artırabilir.

3. CDN (İçerik Dağıtım Ağı) Kullanımı

CDN’ler, statik dosyalarınızı dünyanın dört bir yanındaki sunucularda önbelleğe alarak kullanıcıya coğrafi olarak daha yakın bir noktadan hizmet verir. Nginx’te ayarladığınız önbellekleme başlıkları, CDN’lerin de içeriği ne kadar süreyle önbelleğe alacağını belirler. Bu nedenle, Nginx yapılandırmanızdaki başlıklar, hem tarayıcılar hem de CDN’ler için kritik öneme sahiptir.

4. Gzip Sıkıştırması

Önbelleklemenin yanı sıra, Nginx’in ngx_http_gzip_module ile Gzip sıkıştırmasını etkinleştirmek, transfer edilen veri miktarını önemli ölçüde azaltarak sayfa yükleme sürelerini daha da hızlandırır. Vary: Accept-Encoding başlığı, sıkıştırma ile birlikte kullanıldığında çok önemlidir.

# nginx.conf veya http bloğunda
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Sorun Giderme

* Başlıklar Görünmüyor:
* Nginx yapılandırmasını doğru dosyaya mı yazdınız?
* nginx -t ile yapılandırmayı kontrol ettiniz mi?
* sudo systemctl reload nginx komutuyla Nginx’i yeniden yüklediniz mi?
* Tarayıcınızın geliştirici araçlarında “Disable cache” (Önbelleği devre dışı bırak) seçeneğinin işaretli olmadığından emin olun.
* 304 Not Modified veya (from disk cache) gelmiyor:
* expires süresi dolmuş olabilir.
* Cache-Control başlığınız no-cache veya no-store içeriyor olabilir.
* ETag veya Last-Modified başlıkları eksik olabilir (Nginx statik dosyalar için varsayılan olarak ekler, ancak etag off; ile kapatmış olabilirsiniz).
* Yanlış dosyalar önbelleğe alınıyor:
* location bloklarınızın eşleşme düzenlerini kontrol edin. Nginx’in location blokları işleme sırası önemlidir. Daha spesifik kurallar daha genel kurallardan önce gelmelidir.

Sonuç

Nginx’in http_headers_module aracılığıyla tarayıcı önbelleklemesi uygulamak, web sitenizin performansını ve kullanıcı deneyimini önemli ölçüde artırmanın etkili bir yoludur. HTTP önbellekleme başlıklarının (özellikle Cache-Control, Expires, ETag, Last-Modified ve Vary) nasıl çalıştığını anlamak ve Nginx’in expires ve add_header direktiflerini doğru bir şekilde yapılandırmak, bu optimizasyonu başarıyla uygulamanın anahtarıdır.

Statik dosyalar için agresif önbellekleme ve dinamik içerik için önbelleklemenin devre dışı bırakılması veya kısa süreli olması, genellikle en iyi sonuçları verir. Cache busting ve immutable gibi gelişmiş teknikleri kullanmak, sitenizin güncellenmesini kolaylaştırırken önbellekleme avantajlarından tam olarak yararlanmanızı sağlar. Bu adımları uygulayarak ve yapılandırmanızı düzenli olarak test ederek, CentOS 8 üzerindeki Nginx sunucunuzun web performansını zirveye taşıyabilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.