Takip et

Nginx HTTP Proxying, Yük Dengeleme, Ara Belleğe Alma ve Önbelleğe Alma Mekanizmalarını Anlamak

Nginx HTTP Proxying, Yük Dengeleme, Ara Belleğe Alma ve Önbelleğe Alma Mekanizmalarını Anlamak Giriş Modern web uygulamaları, artan trafik, yüksek erişilebilirlik gereksinimleri ve performans beklentileri nedeniyle karmaşık bir altyapıya ihtiyaç duyar.

Nginx HTTP Proxying, Yük Dengeleme, Ara Belleğe Alma ve Önbelleğe Alma Mekanizmalarını Anlamak

Giriş

Modern web uygulamaları, artan trafik, yüksek erişilebilirlik gereksinimleri ve performans beklentileri nedeniyle karmaşık bir altyapıya ihtiyaç duyar. Bu altyapının temel taşlarından biri de ters proxy sunucularıdır. Nginx, yüksek performanslı, kararlı ve esnek bir ters proxy sunucusu olarak bu ihtiyaçlara mükemmel bir çözüm sunar. HTTP proxying, yük dengeleme, ara belleğe alma (buffering) ve önbelleğe alma (caching) gibi yetenekleri sayesinde Nginx, web uygulamalarının ölçeklenebilirliğini, güvenliğini ve yanıt sürelerini önemli ölçüde artırır. Bu makalede, Nginx’in bu dört kritik mekanizmasını derinlemesine inceleyeceğiz, her birinin nasıl çalıştığını, neden önemli olduğunu ve tipik yapılandırma örneklerini ele alacağız. Amacımız, Nginx’in bu özelliklerini kullanarak web altyapınızı nasıl optimize edebileceğinizi kapsamlı bir şekilde açıklamaktır.

Nginx HTTP Proxying

Nginx’in en temel ve yaygın kullanım alanlarından biri ters proxy sunucusu olarak işlev görmesidir. Ters proxy, istemciden gelen istekleri alır ve bu istekleri bir veya daha fazla arka uç sunucusuna (origin server) iletir. Arka uç sunucusu yanıt verdiğinde, ters proxy bu yanıtı tekrar istemciye iletir. Bu mekanizma, web uygulamalarının mimarisinde birçok avantaj sağlar.

Temeller

Bir ters proxy kullanmanın başlıca faydaları şunlardır:
* Güvenlik: Arka uç sunucularının doğrudan internete maruz kalmasını engelleyerek güvenlik katmanı ekler. Nginx, kötü niyetli istekleri filtreleyebilir veya DDoS saldırılarına karşı bir ilk savunma hattı olabilir.
* Yük Dengeleme: Gelen trafiği birden fazla arka uç sunucusu arasında dağıtarak sistemin ölçeklenebilirliğini ve hata toleransını artırır.
* SSL Sonlandırma: SSL/TLS şifrelemesini Nginx üzerinde sonlandırarak arka uç sunucularının bu yükten kurtulmasını sağlar. Bu, arka uç sunucularının daha çok uygulama mantığına odaklanmasına olanak tanır.
* Önbellekleme: Sık erişilen içeriği önbelleğe alarak arka uç sunucularının yükünü azaltır ve yanıt sürelerini iyileştirir.
* URL Yeniden Yazma ve Yönlendirme: Gelen isteklerin URL’lerini yeniden yazabilir veya belirli koşullara göre farklı arka uçlara yönlendirebilir.

Nginx’te bir ters proxy yapılandırmak için proxy_pass direktifi kullanılır. Bu direktif, bir location bloğu içinde tanımlanır ve gelen isteklerin hangi arka uç sunucusuna iletileceğini belirtir.

server {
    listen 80;
    server_name example.com;

    location /app/ {
        proxy_pass http://backend_servers; # backend_servers bir upstream bloğu veya doğrudan IP olabilir
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Bu örnekte, example.com/app/ ile başlayan tüm istekler http://backend_servers adresine iletilir.

Gelişmiş Proxy Ayarları

Nginx, proxy isteklerinin davranışını kontrol etmek için bir dizi gelişmiş direktif sunar:

* proxy_set_header: Bu direktif, Nginx’in arka uç sunucusuna ilettiği istek başlıklarını özelleştirmek için kullanılır. Yukarıdaki örnekte görüldüğü gibi, Host, X-Real-IP, X-Forwarded-For ve X-Forwarded-Proto gibi başlıklar genellikle ayarlanır.
* Host $host;: İstemcinin orijinal Host başlığını arka uca iletir. Bu, arka uç sunucusunun sanal ana bilgisayarları doğru bir şekilde işlemesi için kritik öneme sahiptir.
* X-Real-IP $remote_addr;: İstemcinin gerçek IP adresini arka uca iletir.
* X-Forwarded-For $proxy_add_x_forwarded_for;: İstemcinin IP adresini ve proxy sunucusunun IP adresini içeren bir liste iletir. Birden fazla proxy zinciri varsa, her proxy kendi IP adresini bu listeye ekler.
* X-Forwarded-Proto $scheme;: İstemcinin Nginx’e bağlanmak için kullandığı protokolü (HTTP veya HTTPS) arka uca iletir.

* proxy_redirect: Bu direktif, arka uç sunucusundan gelen yanıtlardaki Location veya Refresh başlıklarını yeniden yazmak için kullanılır. Örneğin, arka uç /login adresine yönlendirme yapıyorsa, Nginx bunu /app/login olarak değiştirebilir.

proxy_redirect default; # veya proxy_redirect http://backend/ https://example.com/app/;

* proxy_connect_timeout, proxy_send_timeout, proxy_read_timeout: Bu üç direktif, Nginx ile arka uç sunucusu arasındaki bağlantı ve veri aktarım sürelerini kontrol eder.
* proxy_connect_timeout: Nginx’in arka uç sunucusuyla bağlantı kurmak için bekleyeceği maksimum süreyi (saniye cinsinden) ayarlar.
* proxy_send_timeout: Nginx’in arka uç sunucusuna bir istek gönderirken, iki yazma işlemi arasında bekleyeceği maksimum süreyi ayarlar.
* proxy_read_timeout: Nginx’in arka uç sunucusundan bir yanıt okurken, iki okuma işlemi arasında bekleyeceği maksimum süreyi ayarlar.
Bu zaman aşımı ayarları, yavaş veya yanıt vermeyen arka uç sunucularından kaynaklanan sorunları önlemek için önemlidir.

* proxy_next_upstream: Bir arka uç sunucusu hata verdiğinde (örneğin, zaman aşımı, bağlantı hatası, 5xx durum kodu), Nginx’in isteği başka bir arka uç sunucusuna iletip iletmeyeceğini ve hangi koşullarda ileteceğini belirler.

proxy_next_upstream error timeout http_500 http_502 http_503 http_504;

Bu, yük dengeleme ile birlikte kullanıldığında sistemin hata toleransını artırır.

Nginx’in proxy yetenekleri, modern web mimarilerinin temelini oluşturur. İstemci ile arka uç sunucuları arasında bir aracı görevi görerek performansı, güvenliği ve esnekliği artırır.

Yük Dengeleme (Load Balancing)

Yük dengeleme, gelen ağ trafiğini bir grup arka uç sunucusu arasında dağıtarak tek bir sunucunun aşırı yüklenmesini önleyen bir tekniktir. Bu, uygulamaların ölçeklenebilirliğini, erişilebilirliğini ve hata toleransını artırır. Nginx, güçlü bir yazılım tabanlı yük dengeleyici olarak bu alanda çok yaygın olarak kullanılır.

Neden Yük Dengeleme?

* Ölçeklenebilirlik: Uygulamanın trafik talebi arttığında, daha fazla arka uç sunucusu ekleyerek yatay ölçeklendirme sağlar.
* Yüksek Erişilebilirlik: Bir arka uç sunucusu arızalandığında, trafik otomatik olarak çalışan diğer sunuculara yönlendirilir, böylece hizmet kesintisi en aza indirilir.
* Performans İyileştirme: İş yükünü birden fazla sunucuya dağıtarak her bir sunucunun üzerindeki yükü azaltır ve yanıt sürelerini iyileştirir.
* Hata Toleransı: Bir sunucunun çökmesi durumunda bile uygulamanın çalışmaya devam etmesini sağlar.

Upstream Blokları

Nginx’te yük dengeleme, upstream bloğu kullanılarak yapılandırılır. Bu blok, bir grup arka uç sunucusunu tanımlar ve Nginx’in bu sunuculara istekleri nasıl dağıtacağını belirtir.

upstream backend_servers {
    server backend1.example.com:8080;
    server backend2.example.com:8080;
    server backend3.example.com:8080;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_servers;
        # Diğer proxy ayarları...
    }
}

Burada backend_servers adında bir upstream grubu tanımlanmıştır. location / bloğundaki proxy_pass http://backend_servers; direktifi, gelen tüm isteklerin bu upstream grubundaki sunuculara iletileceğini belirtir.

Yük Dengeleme Yöntemleri

Nginx, çeşitli yük dengeleme algoritmalarını destekler:

1. Round Robin (Varsayılan): İstekleri sırayla upstream grubundaki sunuculara dağıtır. Her sunucuya bir sonraki istek gönderilir. Bu, varsayılan yöntemdir ve herhangi bir özel direktif belirtilmediğinde kullanılır.

upstream backend_servers {
        server backend1.example.com:8080;
        server backend2.example.com:8080;
    }

2. Weighted Round Robin (Ağırlıklı Round Robin): Sunuculara farklı ağırlıklar atanabilir. Ağırlığı daha yüksek olan sunuculara daha fazla istek gönderilir. Bu, farklı kapasitelere sahip sunucularınız olduğunda kullanışlıdır.

upstream backend_servers {
        server backend1.example.com:8080 weight=3;
        server backend2.example.com:8080 weight=1;
    }

Bu örnekte, backend1‘e backend2‘den üç kat daha fazla istek gönderilir.

3. Least Connected (En Az Bağlantılı): İstekleri o anda en az aktif bağlantıya sahip olan sunucuya gönderir. Bu, sunucuların iş yükünü daha dengeli bir şekilde dağıtmak için etkilidir, çünkü sadece istek sayısı değil, aynı zamanda o isteğin işlenme süresi de dikkate alınır.

upstream backend_servers {
        least_conn;
        server backend1.example.com:8080;
        server backend2.example.com:8080;
    }

4. IP Hash (IP Karması): İstemcinin IP adresine göre bir karma değer hesaplar ve aynı IP adresinden gelen tüm istekleri her zaman aynı sunucuya gönderir. Bu, oturum kalıcılığı (session persistence) sağlamak için kullanışlıdır, ancak sunucu grubuna yeni sunucular eklendiğinde veya çıkarıldığında dengeyi bozabilir.

upstream backend_servers {
        ip_hash;
        server backend1.example.com:8080;
        server backend2.example.com:8080;
    }

5. Generic Hash (Genel Karma): İstemci IP adresi yerine, kullanıcı tanımlı bir anahtar (örneğin, URL parametresi, çerez değeri) üzerinde karma değer hesaplar. Bu, daha esnek oturum kalıcılığı sağlar.

upstream backend_servers {
        hash $request_uri consistent; # request_uri'ye göre karma
        server backend1.example.com:8080;
        server backend2.example.com:8080;
    }

6. Random (Rastgele): İstekleri rastgele bir şekilde sunuculara dağıtır. İsteğe bağlı olarak, least_time parametresi ile en düşük ortalama yanıt süresine sahip sunucuya öncelik verilebilir.

upstream backend_servers {
        random;
        server backend1.example.com:8080;
        server backend2.example.com:8080;
    }

Sağlık Kontrolleri ve Hata Toleransı

Nginx, arka uç sunucularının durumunu izleyebilir ve başarısız olan sunucuları otomatik olarak havuzdan çıkarabilir. Bu, sistemin hata toleransını artırır.

* max_fails: Bir sunucunun belirli bir süre içinde kaç kez başarısız olabileceğini belirtir. Varsayılan olarak 1’dir.
* fail_timeout: max_fails sayısına ulaşıldıktan sonra sunucunun ne kadar süreyle “çalışmıyor” olarak işaretleneceğini belirtir. Bu süre sonunda Nginx, sunucuyu tekrar test etmek için bir istek gönderecektir. Varsayılan olarak 10 saniyedir.
* down: Bir sunucunun kalıcı olarak devre dışı olduğunu belirtir. Bu sunucuya hiçbir istek gönderilmez. Bakım işlemleri için kullanışlıdır.
* backup: Diğer tüm sunucular meşgul olduğunda veya başarısız olduğunda kullanılacak yedek sunucuyu belirtir.

upstream backend_servers {
        server backend1.example.com:8080 max_fails=3 fail_timeout=30s;
        server backend2.example.com:8080;
        server backend3.example.com:8080 backup; # Yedek sunucu
        server backend4.example.com:8080 down;   # Devre dışı
    }

Nginx’in yük dengeleme özellikleri, yüksek trafikli web uygulamaları için kritik öneme sahiptir. Doğru yapılandırma ile hem performansı hem de güvenilirliği önemli ölçüde artırabilir.

Ara Belleğe Alma (Buffering)

Nginx’in bir proxy sunucusu olarak çalışırken önemli bir yeteneği de ara belleğe alma (buffering) mekanizmasıdır. Bu, Nginx’in arka uç sunucusundan gelen yanıtı tamamen veya kısmen kendi belleğine veya diskine kaydetmesi ve ardından bu yanıtı istemciye göndermesi anlamına gelir. Ara belleğe alma, Nginx’in istemci ile arka uç sunucusu arasındaki veri akışını yönetmesine ve performansı optimize etmesine olanak tanır.

Ara Belleğe Almanın Önemi

* Hız Farklılıklarını Yönetme: İstemci bağlantı hızı ile arka uç sunucusunun yanıt hızı arasında farklılıklar olabilir. Nginx, yanıtı hızlı bir şekilde arka uçtan alıp kendi belleğinde tutabilir ve istemciye kendi hızında gönderebilir. Bu, arka uç sunucusunun kaynaklarını daha hızlı serbest bırakır.
* Kaynak Optimizasyonu: Arka uç sunucusu, bir yanıtı tek seferde Nginx’e gönderip bağlantıyı kapatabilir. Bu, arka uç sunucusunun uzun süreli istemci bağlantılarını yönetme yükünden kurtulmasını sağlar ve kaynaklarını (CPU, bellek) diğer isteklere ayırmasına olanak tanır.
* Hata Toleransı: Tam yanıtı ara belleğe aldıktan sonra, Nginx yanıtı istemciye göndermeye başlar. Eğer bu süreçte arka uç sunucusu çökerse, Nginx zaten yanıtı belleğinde tuttuğu için istemciye sorunsuz bir şekilde hizmet vermeye devam edebilir.
* HTTP/1.0 İstemcileriyle Uyumluluk: Bazı eski HTTP/1.0 istemcileri, yanıtın tamamını alana kadar bağlantıyı açık tutmayı bekleyebilir. Ara belleğe alma, Nginx’in bu tür istemcilere tam yanıtı sunmasına yardımcı olur.

Nginx Proxy Ara Bellek Mekanizması

Nginx, varsayılan olarak proxy ara belleğe almayı etkinleştirir. Bir istemci bir istek gönderdiğinde:
1. Nginx isteği arka uç sunucusuna iletir.
2. Arka uç sunucusu yanıt vermeye başladığında, Nginx bu yanıtı ara belleğe almaya başlar. Yanıtın ilk kısmı genellikle proxy_buffer_size tarafından belirlenen küçük bir belleğe alınır.
3. Yanıtın geri kalanı, proxy_buffers tarafından belirlenen daha büyük belleklere alınır.
4. Eğer yanıt, tahsis edilen bellek alanını aşarsa, Nginx yanıtı proxy_temp_path direktifiyle belirtilen geçici diske yazar.
5. Yanıtın tamamı ara belleğe alındıktan veya yeterli bir kısmı alındıktan sonra, Nginx yanıtı istemciye göndermeye başlar.

Ara Bellek Ayarları

Ara belleğe alma davranışını kontrol etmek için kullanılan temel Nginx direktifleri şunlardır:

* proxy_buffering: Ara belleğe almayı açar veya kapatır. Varsayılan olarak on (açık) değerindedir. Eğer off olarak ayarlanırsa, Nginx arka uç sunucusundan gelen yanıtı doğrudan istemciye akış (stream) olarak iletir. Bu, düşük gecikme süresi gerektiren uygulamalar (örneğin, uzun süreli bağlantılar, web soketleri) için uygun olabilir, ancak yukarıda bahsedilen avantajları kaybedersiniz.

proxy_buffering on; # Varsayılan
    # proxy_buffering off;

* proxy_buffers: Nginx’in arka uç sunucusundan gelen yanıtı ara belleğe almak için kullanacağı bellek tamponlarının sayısını ve boyutunu ayarlar. Sözdizimi sayı boyut şeklindedir. Örneğin, 4 8k Nginx’in 8 kilobayt boyutunda 4 adet bellek tamponu kullanacağı anlamına gelir. Toplamda 32 kilobayt belleğe alınabilir. Daha büyük yanıtlar için bu değerleri artırmanız gerekebilir.

proxy_buffers 8 16k; # 16KB boyutunda 8 adet buffer, toplam 128KB

* proxy_buffer_size: Arka uç sunucusundan gelen yanıtın ilk kısmı için kullanılan tek bir ara belleğin boyutunu ayarlar. Bu genellikle HTTP başlıklarını ve yanıtın ilk birkaç kilobaytını içerir. Varsayılan olarak proxy_buffers içindeki size değeri ile aynıdır, ancak daha küçük bir değerle de ayarlanabilir.

proxy_buffer_size 8k;

* proxy_busy_buffers_size: Nginx’in bir anda istemciye göndermekle meşgul olabileceği maksimum ara bellek boyutunu ayarlar. Bu değer, proxy_buffers tarafından tanımlanan toplam bellek boyutundan daha küçük olmalıdır.

proxy_busy_buffers_size 16k;

* proxy_temp_path: Arka uç sunucusundan gelen yanıtın belleğe sığmaması durumunda, Nginx’in geçici dosyaları depolayacağı dizini belirtir. Bu dizin Nginx kullanıcısı tarafından yazılabilir olmalıdır.

proxy_temp_path /var/cache/nginx/proxy_temp;

* proxy_max_temp_file_size: Geçici dosyalara yazılacak maksimum boyutu ayarlar. Eğer yanıt bu boyutu aşarsa, Nginx yanıtı disk yerine doğrudan istemciye akış olarak göndermeye başlar (eğer proxy_buffering açıksa). 0 olarak ayarlanırsa, geçici dosyalara yazma tamamen devre dışı bırakılır.

proxy_max_temp_file_size 1024m; # 1GB

Ara belleğe alma, Nginx’in performansını ve kararlılığını artıran güçlü bir özelliktir. Doğru yapılandırma ile, arka uç sunucularının yükünü azaltabilir, istemci deneyimini iyileştirebilir ve sistemin genel dayanıklılığını artırabilirsiniz. Ancak, çok büyük tamponlar tanımlamak, Nginx sunucusunun bellek tüketimini artırabilir, bu yüzden bu ayarlar dikkatli bir şekilde optimize edilmelidir.

Önbelleğe Alma (Caching)

Önbelleğe alma, web performansını artırmak ve arka uç sunucularının yükünü azaltmak için en etkili yöntemlerden biridir. Nginx, güçlü bir ters proxy önbelleği olarak işlev görebilir. Önbelleğe alma, sık erişilen içeriği Nginx sunucusunda depolayarak, aynı içeriğe yönelik sonraki isteklerde arka uç sunucusuna gitme ihtiyacını ortadan kaldırır.

Önbelleğin Faydaları

* Daha Hızlı Yanıt Süreleri: Önbelleğe alınmış içerik, arka uç sunucusuna bir istek göndermeye gerek kalmadan doğrudan Nginx’ten servis edildiği için çok daha hızlıdır.
* Arka Uç Yükünün Azaltılması: Arka uç sunucularının aynı içeriği tekrar tekrar üretme ve sunma yükünü ortadan kaldırır. Bu, özellikle yüksek trafikli sitelerde CPU ve veritabanı kaynaklarından tasarruf sağlar.
* Trafik Yüksekliğine Karşı Dayanıklılık: Önbellek, ani trafik artışlarını (flash crowd) absorbe edebilir, böylece arka uç sunucularının çökmesini önler.
* Hata Toleransı: Arka uç sunucusu geçici olarak kullanılamaz hale gelirse, Nginx önbelleğe alınmış eski içeriği (stale content) sunmaya devam edebilir.

Nginx Proxy Önbellek Yapılandırması

Nginx’te önbelleğe alma iki ana direktif kullanılarak yapılandırılır: proxy_cache_path ve proxy_cache.

1. proxy_cache_path: Bu direktif, önbellek dosyalarının depolanacağı dizini ve önbelleğin genel ayarlarını tanımlar. Genellikle http bağlamında veya server bağlamında tanımlanır.

http {
        proxy_cache_path /var/cache/nginx/my_cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;

        server {
            listen 80;
            server_name example.com;

            location / {
                proxy_cache my_cache; # Önbelleği etkinleştir
                proxy_pass http://backend_servers;
                # Diğer proxy ayarları...
            }
        }
    }

Bu direktifin parametreleri şunlardır:
* /var/cache/nginx/my_cache: Önbellek dosyalarının depolanacağı dizin yolu. Bu dizinin Nginx kullanıcısı tarafından yazılabilir olması gerekir.
* levels=1:2: Önbellek hiyerarşisinin derinliğini ve dizin adlarının uzunluğunu tanımlar. Örneğin, levels=1:2 önbellek dosyalarının /var/cache/nginx/my_cache/c/29/xxxxxxxxxxxxxxxxxxxxxx gibi bir yapıda saklanacağı anlamına gelir. Bu, binlerce dosyanın tek bir dizinde depolanmasını önleyerek dosya sistemi performansını artırır.
* keys_zone=my_cache:10m: Önbellek anahtarlarını ve meta verilerini depolamak için paylaşımlı bir bellek alanı tanımlar. my_cache önbellek alanının adıdır ve 10m (10 megabayt) boyutu, yaklaşık 80.000 aktif anahtarı depolayabilir.
* inactive=60m: Belirtilen süre boyunca (60 dakika) erişilmeyen önbellek öğelerinin otomatik olarak silinmesini sağlar.
* max_size=1g: Önbelleğin disk üzerindeki maksimum boyutunu ayarlar. Bu boyuta ulaşıldığında, Nginx en az kullanılan eski öğeleri silerek yer açar.

2. proxy_cache: Bu direktif, belirli bir location veya server bloğu içinde önbelleği etkinleştirmek için kullanılır ve proxy_cache_path ile tanımlanan önbellek bölgesinin adını alır.

proxy_cache my_cache;

Önbellek Kontrolü ve Geçersiz Kılma

* proxy_cache_key: Önbellek öğelerini benzersiz bir şekilde tanımlamak için kullanılan anahtarı belirler. Varsayılan olarak $scheme$proxy_host$request_uri kullanılır, ancak bu, isteğin yöntemini (GET, POST), başlıkları veya çerezleri içerecek şekilde özelleştirilebilir.

proxy_cache_key "$scheme$request_method$host$request_uri";

* proxy_cache_valid: Farklı HTTP durum kodları için önbellek geçerlilik sürelerini ayarlar.

proxy_cache_valid 200 302 10m; # 200 ve 302 durum kodları için 10 dakika
    proxy_cache_valid 404      1m;  # 404 durum kodu için 1 dakika
    proxy_cache_valid any      1m;  # Diğer tüm durum kodları için 1 dakika

* proxy_cache_bypass: Belirli koşullar altında önbelleği atlayarak isteğin doğrudan arka uca gitmesini sağlar. Bu, genellikle kullanıcı oturumları veya dinamik içerik için kullanılır.

proxy_cache_bypass $http_pragma $http_authorization; # Pragma veya Authorization başlığı varsa önbelleği atla

* proxy_no_cache: Belirli koşullar altında yanıtın önbelleğe alınmasını tamamen engeller.

proxy_no_cache $http_pragma $http_authorization;

* add_header X-Cache-Status $upstream_cache_status;: Bu başlık, yanıtın önbellekten mi (HIT), arka uçtan mı (MISS), yoksa önbelleğin güncellendiği sırada eski içerik mi (STALE) servis edildiğini gösterir. Hata ayıklama ve önbellek performansını izlemek için çok kullanışlıdır.

Gelişmiş Önbellek Stratejileri

* proxy_cache_revalidate: Bu direktif on olarak ayarlandığında, Nginx önbelleğe alınmış içerik süresi dolduğunda, arka uca bir If-Modified-Since veya If-None-Match başlığı ile koşullu bir istek gönderir. Eğer içerik değişmemişse, arka uç 304 (Not Modified) yanıtı döner ve Nginx önbelleği yeniden kullanır. Bu, bant genişliğinden tasarruf sağlar.

proxy_cache_revalidate on;

* proxy_cache_use_stale: Bu direktif, arka uç sunucusu kullanılamaz olduğunda veya bir hata döndürdüğünde Nginx’in süresi dolmuş (stale) önbellek içeriğini sunmasına izin verir. Bu, yüksek erişilebilirlik için kritik bir özelliktir.

proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

updating parametresi, bir öğe güncellenirken Nginx’in eski bir sürümünü sunmasına olanak tanır. Bu, “dog-pile effect” olarak bilinen durumu önler; yani birçok istemcinin aynı anda süresi dolmuş bir öğeyi istemesi ve arka uç sunucusunu aynı anda yüklemesi.

* Önbellek Temizleme (Purging): Nginx OSS sürümünde yerleşik bir önbellek temizleme mekanizması bulunmaz. Ancak, özel bir location bloğu ve proxy_cache_purge (Nginx Plus veya 3. parti modül gerektirir) veya manuel dosya silme yöntemleri ile bu işlevsellik sağlanabilir. Genellikle, önbellek dosyalarının saklandığı dizinde belirli bir anahtara karşılık gelen dosyayı silmek en basit manuel yöntemdir.

Önbelleğe alma, Nginx’in sunduğu en güçlü performans iyileştirme araçlarından biridir. Doğru yapılandırıldığında, web uygulamalarınızın yanıt sürelerini dramatik bir şekilde hızlandırabilir ve altyapınızın genel verimliliğini artırabilir.

Sonuç

Nginx, modern web altyapılarının vazgeçilmez bir bileşenidir. HTTP proxying, yük dengeleme, ara belleğe alma ve önbelleğe alma gibi temel yetenekleri sayesinde, web uygulamalarının performansını, güvenliğini, ölçeklenebilirliğini ve erişilebilirliğini önemli ölçüde artırır.

Ters proxy olarak Nginx, arka uç sunucularını dış dünyaya karşı korurken, aynı zamanda SSL sonlandırma ve URL yeniden yazma gibi hizmetler sunar. Yük dengeleme mekanizmaları, gelen trafiği birden fazla sunucu arasında akıllıca dağıtarak yüksek erişilebilirlik ve hata toleransı sağlar. Ara belleğe alma, istemci ve sunucu arasındaki hız farklılıklarını yöneterek arka uç kaynaklarının daha verimli kullanılmasını sağlar. Son olarak, önbelleğe alma, sık erişilen içeriği Nginx üzerinde tutarak yanıt sürelerini kısaltır ve arka uç sunucularının yükünü azaltır.

Bu mekanizmaların her biri, Nginx’i sadece bir web sunucusu olmaktan çıkarıp, karmaşık ve yüksek performanslı web mimarileri için kapsamlı bir çözüm haline getirir. Nginx yapılandırma dosyalarındaki direktifleri doğru bir şekilde anlamak ve uygulamak, web altyapınızı optimize etmenin ve kullanıcılarınıza üstün bir deneyim sunmanın anahtarıdır. Bu makalede ele alınan kavramlar ve örnekler, Nginx’in bu güçlü özelliklerini etkin bir şekilde kullanmanız için sağlam bir temel sağlamaktadır.

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

Gönder

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.
Exit mobile version