Tiesto

WFN Üye
Konular
635
Mesajlar
635
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Antalya
Web Sitesi
Var
Alanı
Domain Uzmanı
1/1
Konu sahibi
İlk olarak hangi içeriği önbelleğe alacağınızı belirleyin: Nginx’in arkasında PHP-FPM varsa fastcgi_cache, başka bir HTTP uygulama sunucusu varsa proxy_cache kullanılır. Önbellek alanını http bloğunda tanımlayıp ilgili server veya location bloğunda etkinleştirin; ardından yapılandırmayı nginx -t ile doğrulayarak yeniden yükleyin. Başarılı bir testte ilk istek genellikle MISS, sonraki aynı istek ise HIT durumunu göstermelidir. Oturum açmış kullanıcı, sepet, ödeme ve kişiye özel yanıtlar önbelleğe alınmamalıdır.

Önbellek türünü seçin​


Nginx’in önbelleğe alması iki yaygın biçimde yapılandırılır:
Uygulama yapısıKullanılacak yapıTipik kullanım
Nginx → PHP-FPMfastcgi_cacheWordPress ve diğer PHP uygulamalarının anonim sayfaları
Nginx → HTTP upstreamproxy_cacheNode.js, Python, Java veya başka bir HTTP sunucusunun yanıtları
Aşağıdaki örnek PHP-FPM içindir. Uygulamanız proxy_pass ile başka bir HTTP sunucusuna bağlanıyorsa aynı mantığı proxy_cache_path, proxy_cache ve ilgili proxy_no_cache yönergeleriyle uygulamanız gerekir.

PHP-FPM için FastCGI önbelleğini tanımlayın​


Önce Nginx’in yazabileceği bir dizin oluşturun. Örnekte dizin /var/cache/nginx/fastcgi olarak kabul edilmiştir. Dağıtımınızda Nginx çalışan kullanıcının bu dizine yazma izni olmalıdır; kullanıcı adı sisteme göre www-data, nginx veya başka bir değer olabilir.

Nginx yapılandırmasındaki ana http bloğuna, server bloklarının dışına şu tanımı ekleyin:

NGINX:
fastcgi_cache_path /var/cache/nginx/fastcgi
    levels=1:2
    keys_zone=PHP_CACHE:100m
    inactive=60m
    max_size=1g
    use_temp_path=off;

keys_zone önbellek anahtarlarının bellekte tutulduğu alanı, inactive uzun süre erişilmeyen kayıtların silinme süresini, max_size ise disk kullanım sınırını belirler. Bu değerler örnektir; max_size değerini önbellek için ayırabileceğiniz disk alanına göre belirleyin. Dizin yoksa oluşturun ve Nginx işçisinin yazma iznini verin.

PHP location bloğunu düzenleyin​


PHP isteklerini işleyen mevcut location ~ \\.php$ bloğunuzda, zaten bulunan fastcgi_pass ve fastcgi_param yönergelerini koruyarak önbellek ayarlarını ekleyin. Örnek:

NGINX:
location ~ \\.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/php-fpm.sock;

    fastcgi_cache PHP_CACHE;
    fastcgi_cache_methods GET HEAD;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";
    fastcgi_cache_valid 200 301 302 10m;
    fastcgi_cache_valid 404 1m;

    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache     $skip_cache;

    add_header X-FastCGI-Cache $upstream_cache_status always;
}

Buradaki PHP-FPM soket yolu sisteminizde farklı olabilir. Mevcut çalışan yapılandırmanızda fastcgi_pass satırı varsa onu örnekteki değerle değiştirmeyin. fastcgi_cache_key aynı URL’nin hangi önbellek kaydına karşılık geldiğini belirler; $host ve $request_uri kullanılması farklı alan adlarının veya sorgu dizelerinin yanlışlıkla aynı içerik olarak değerlendirilmesini önlemeye yardımcı olur.

Oturum ve kişisel içerikleri dışarıda bırakın​


Önbellek ayarının güvenli olması için giriş yapmış kullanıcıların ve değişken içerik üreten isteklerin önbellekten okunmasını ve önbelleğe yazılmasını engelleyin. server veya http bloğunda şu eşlemeyi tanımlayın:

NGINX:
map $request_method $skip_cache_method {
    default 0;
    POST    1;
}

map $http_cookie $skip_cache_cookie {
    default 0;
    ~*"(PHPSESSID|wordpress_logged_in_|comment_author_)" 1;
}

map "$skip_cache_method$skip_cache_cookie" $skip_cache {
    default 0;
    ~1      1;
}

Bu örnek POST isteklerini ve belirtilen oturum çerezlerini dışarıda bırakır. Eşlemenin mevcut map tanımlarıyla çakışmadığından emin olun. Uygulamanız farklı çerez adları kullanıyorsa onları ayrıca ekleyin. Yönetim paneli, sepet, ödeme ve kullanıcı hesabı yollarını da ayrıca hariç tutmak gerekir; yalnız çerez kontrolü bütün uygulamalarda yeterli olmayabilir.

Bir uygulama yanıtında Set-Cookie gönderiyor veya Cache-Control: private/no-store belirtiyorsa bunu zorla önbelleğe almak yerine önce uygulamanın neden kişisel yanıt ürettiğini çözün. Nginx yönergeleriyle bu başlıkları yok saymak, yanlış kullanılırsa bir kullanıcının verisini başka bir kullanıcıya gösterebilir.

Yapılandırmayı kaydedip sonucu kontrol edin​


Değişiklikleri kaydettikten sonra çalışan Nginx’e doğrudan yeniden başlatma uygulamak yerine önce söz dizimini test edin:
  1. Sunucuda nginx -t komutunu çalıştırın. syntax is ok ve test is successful benzeri başarılı bir çıktı görmeden yeniden yükleme yapmayın.
  2. Test başarılıysa systemctl reload nginx komutuyla yapılandırmayı yeniden yükleyin. Hata alırsanız önce hata mesajındaki dosya ve satır numarasını kontrol edin; özellikle fastcgi_cache_path satırının http bloğunda, fastcgi_cache satırının ise uygun location içinde olduğunu doğrulayın.
  3. Aynı herkese açık URL’yi iki kez isteyin: curl -I https://alanadiniz.example/ornek-sayfa/. İlk yanıtta X-FastCGI-Cache: MISS, sonraki istekte X-FastCGI-Cache: HIT görmeyi beklersiniz.
MISS, yanıtın henüz önbellekte bulunmadığını veya bu istek için önbellek kaydı oluşturulmadığını gösterir; tek başına yapılandırmanın bozuk olduğunu kanıtlamaz. İkinci istekte de MISS görüyorsanız URL değişiyor olabilir, yanıt önbelleğe alınmıyor olabilir, Set-Cookie veya Cache-Control başlıkları devreye giriyor olabilir ya da $skip_cache değeri 1 oluyordur. Bu durumda yanıt başlıklarını curl -I ile, Nginx hata günlüğünü ve uygulamanın gönderdiği önbellek başlıklarını birlikte inceleyin.

İçerik güncellendiğinde eski kayıt, belirlediğiniz fastcgi_cache_valid süresi dolana kadar sunulabilir. Acil bir güncellemede ilgili önbellek dizinini temizleyip Nginx’i yeniden yüklemek yerine, önce bakım anında ve aktif istekler yokken temizleme planı uygulayın; tüm önbellek dizinini silmek geçici olarak disk ve PHP-FPM yükünü artırabilir. Daha kontrollü temizleme gerekiyorsa Nginx Open Source’ta yerleşik, genel amaçlı bir PURGE yönergesi bulunmadığını ve kullanılan üçüncü taraf çözümlerin ayrıca incelenmesi gerektiğini dikkate alın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic