Ubuntu 13.10 Üzerinde Varnish ve Nginx ile Kümelenmiş Web Sunucusu Yapılandırması
Giriş
Günümüzün dijital dünyasında, web uygulamalarının ve sitelerinin yüksek performans, sürekli erişilebilirlik ve ölçeklenebilirlik sunması kritik bir öneme sahiptir. Kullanıcı beklentileri arttıkça, tek bir sunucunun tüm yükü kaldırması giderek zorlaşmaktadır. Bu durum, web sunucularını kümeleme (clustering) ihtiyacını doğurmuştur. Kümelenmiş bir yapı, trafik yoğunluğunu birden fazla sunucuya dağıtarak hem performansı artırır hem de bir sunucunun arızalanması durumunda hizmetin kesintisiz devam etmesini sağlar.
Bu makalede, Ubuntu 13.10 işletim sistemi üzerinde Varnish Cache ve Nginx kullanarak nasıl kümelenmiş bir web sunucusu ortamı oluşturulacağını ayrıntılı olarak ele alacağız. Nginx, hafifliği ve yüksek performansıyla bilinen bir web sunucusu ve ters proxy iken, Varnish Cache, HTTP trafiğini önbelleğe alarak sunucu yükünü azaltan ve yanıt sürelerini hızlandıran güçlü bir HTTP hızlandırıcıdır. Bu iki teknolojinin birleşimi, yüksek trafiğe sahip web siteleri için sağlam, hızlı ve ölçeklenebilir bir altyapı sunar. Ubuntu 13.10 eski bir sürüm olsa da, bu makaledeki temel kavramlar ve yapılandırma adımları, daha yeni Ubuntu sürümleri için de uyarlanabilir bir başlangıç noktası sağlayacaktır.
Neden Kümelenmiş Web Sunucusu?
Web uygulamalarının ve sitelerinin kümelenmiş bir yapıda çalıştırılması, çeşitli avantajlar sunar:
* Yüksek Erişilebilirlik (High Availability): Tek bir sunucunun arızalanması durumunda, diğer sunucular hizmeti devralarak kesintiyi önler. Bu, kullanıcılar için sürekli erişilebilir bir deneyim sağlar.
* Ölçeklenebilirlik (Scalability): Trafik arttığında, sisteme kolayca ek Nginx sunucuları eklenerek yatay ölçeklenme sağlanabilir. Varnish, bu yeni sunucuları otomatik olarak arka uç havuzuna dahil edebilir.
* Performans (Performance): Gelen istekler birden fazla sunucuya dağıtıldığı için her sunucunun üzerindeki yük azalır. Ayrıca Varnish Cache, sıkça istenen içeriği önbelleğe alarak sunucuya ulaşan istek sayısını minimize eder ve yanıt sürelerini önemli ölçüde hızlandırır.
* Yük Dengeleme (Load Balancing): Varnish, gelen istekleri yapılandırılmış arka uç Nginx sunucuları arasında dağıtarak her sunucunun eşit veya belirlenen ağırlıkta yük almasını sağlar. Bu, kaynakların daha verimli kullanılmasını sağlar.
* Kaynak Verimliliği: Statik içeriklerin Varnish tarafından önbelleğe alınması, Nginx sunucularının yalnızca dinamik içerik işleme veya önbellekte bulunmayan isteklerle ilgilenmesini sağlar, bu da CPU ve bellek kullanımını optimize eder.
Mimari Tasarım
Oluşturacağımız kümelenmiş web sunucusu mimarisi aşağıdaki bileşenlerden oluşacaktır:
1. İstemciler (Clients): Web tarayıcıları veya diğer uygulamalar aracılığıyla web sitesine erişen kullanıcılar.
2. Varnish Cache Sunucusu: Gelen tüm HTTP isteklerini karşılayan ön uç sunucu. İçeriği önbelleğe alır ve önbellekte bulunmayan veya önbelleğe alınmaması gereken istekleri arka uç Nginx sunucularına iletir. Aynı zamanda bir yük dengeleyici görevi görerek istekleri birden fazla Nginx sunucusu arasında dağıtır.
3. Nginx Web Sunucuları (Backend Servers): Gerçek web uygulamasını veya içeriği barındıran sunucular. Varnish’ten gelen istekleri işler ve yanıtları Varnish’e geri gönderir. Kümelenmiş yapı için en az iki Nginx sunucusu kullanacağız.
Bu yapılandırmada, istemciler doğrudan Nginx sunucularıyla iletişim kurmaz; tüm trafik Varnish üzerinden geçer. Bu, Varnish’in hem bir güvenlik katmanı hem de bir performans katmanı olarak hareket etmesini sağlar.
Örnek IP Adresleri ve Rolleri:
* Varnish Sunucusu: 192.168.1.10 (Genel erişime açık IP)
* Nginx Sunucusu 1: 192.168.1.11 (Yalnızca Varnish tarafından erişilebilir dahili IP)
* Nginx Sunucusu 2: 192.168.1.12 (Yalnızca Varnish tarafından erişilebilir dahili IP)
Gereksinimler
Bu yapılandırma için aşağıdaki gereksinimlere ihtiyacımız olacak:
* Üç Adet Ubuntu 13.10 Sunucusu:
* Bir tanesi Varnish Cache için.
* İki tanesi Nginx web sunucuları için.
* Her sunucunun statik bir IP adresine sahip olması tercih edilir.
* SSH Erişimi: Her sunucuya SSH üzerinden erişim ve sudo yetkilerine sahip bir kullanıcı.
* Temel Linux Bilgisi: Komut satırı kullanımı, dosya düzenleme (nano veya vi), servis yönetimi (service komutları).
Adım 1: Temel Sistem Güncellemesi ve Ön Hazırlıklar
Her üç sunucuda da (Varnish ve Nginx sunucuları) aşağıdaki adımları uygulayarak sistemleri güncelleyelim ve gerekli paketleri kuralım.
Sistem Güncellemesi
Öncelikle her sunucuda paket listesini güncelleyelim ve mevcut paketleri yükseltelim:
sudo apt-get update
sudo apt-get upgrade -y
Gerekli Araçların Kurulumu
Bazı temel ağ araçları ve metin düzenleyicileri işimizi kolaylaştıracaktır:
sudo apt-get install curl wget nano -y
Adım 2: Nginx Web Sunucularının Yapılandırılması
Bu adımları 192.168.1.11 ve 192.168.1.12 IP adreslerine sahip her iki Nginx sunucusunda da uygulayacağız.
Nginx Kurulumu
Nginx paketini kuralım:
sudo apt-get install nginx -y
Kurulumdan sonra Nginx servisi otomatik olarak başlayacaktır. Durumunu kontrol edebilirsiniz:
service nginx status
Nginx Sanal Host Yapılandırması
Her Nginx sunucusunda, web sitemiz için bir sanal host yapılandırması oluşturalım. Varsayılan olarak Nginx, 80 numaralı portta dinler. Ancak Varnish önünde olacağı için, Nginx’in başka bir portta (örneğin 8080) dinlemesini sağlayacağız. Bu, Varnish ile Nginx arasındaki iletişimin dahili kalmasını sağlar.
Varsayılan yapılandırma dosyasını düzenleyelim veya yeni bir tane oluşturalım:
sudo nano /etc/nginx/sites-available/default
Dosyanın içeriğini aşağıdaki gibi güncelleyelim. listen yönergesini 8080 olarak değiştirmeyi unutmayın:
server {
listen 8080 default_server;
listen [::]:8080 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
# Make sure that your domain name is set correctly
server_name localhost; # Buraya kendi alan adınızı yazabilirsiniz, ancak Varnish arkasında olduğu için localhost da yeterlidir.
location / {
try_files $uri $uri/ =404;
}
# İstek başlıklarına sunucu adını ekleyelim, böylece hangi Nginx sunucusundan yanıt geldiğini görebiliriz.
add_header X-Nginx-Server "$hostname";
}
Değişiklikleri kaydedip (Ctrl+O, Enter, Ctrl+X) Nginx yapılandırmasını test edelim ve servisi yeniden başlatalım:
sudo nginx -t
sudo service nginx restart
Örnek Web İçeriği
Hangi Nginx sunucusundan yanıt aldığımızı görmek için her sunucuda farklı bir index.html dosyası oluşturalım.
Nginx Sunucusu 1 (192.168.1.11) üzerinde:
echo "Bu içerik 192.168.1.11 adresinden sunulmaktadır.
" | sudo tee /usr/share/nginx/html/index.html
Nginx Sunucusu 2 (192.168.1.12) üzerinde:
echo "Bu içerik 192.168.1.12 adresinden sunulmaktadır.
" | sudo tee /usr/share/nginx/html/index.html
Bu aşamada, her Nginx sunucusuna doğrudan IP adresi ve port (örneğin http://192.168.1.11:8080) üzerinden erişerek çalıştıklarından emin olabilirsiniz.
Adım 3: Varnish Cache Sunucusunun Yapılandırılması
Bu adımları 192.168.1.10 IP adresine sahip Varnish sunucusunda uygulayacağız.
Varnish Kurulumu
Varnish paketini kuralım:
sudo apt-get install varnish -y
Varnish Temel Yapılandırması
Varnish’in varsayılan olarak hangi portta dinleyeceğini ve hangi yapılandırma dosyasını kullanacağını ayarlamamız gerekiyor. Ubuntu 13.10’da bu genellikle /etc/default/varnish veya /etc/varnish/varnish.params dosyasında yapılır. Ubuntu 13.10 için /etc/default/varnish dosyasını düzenleyeceğiz.
sudo nano /etc/default/varnish
Bu dosyada VARNISH_LISTEN_PORT değerini 80 olarak değiştirelim veya ilgili satırı bulup ayarlayalım. Ayrıca, DAEMON_OPTS içinde -a parametresi ile hangi IP ve portta dinleyeceğini belirtmemiz gerekebilir. Eğer yoksa, aşağıdaki gibi bir satır ekleyelim/düzenleyelim:
# The port Varnish should listen on.
VARNISH_LISTEN_PORT=80
The configuration file to use.
VARNISH_VCL_CONF=/etc/varnish/default.vcl
Varnish storage parameters.
VARNISH_STORAGE="malloc,256M" # 256MB bellek içi önbellek kullanır. İhtiyaca göre artırılabilir.
Other daemon options.
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s ${VARNISH_STORAGE}"
VARNISH_LISTEN_PORT‘u 80 olarak ayarlamak, Varnish’in standart HTTP portunda dinlemesini sağlar. DAEMON_OPTS içindeki -a :80 de aynı anlama gelir. Bu dosyadaki ayarlamalar, Varnish servisinin başlangıç parametrelerini belirler.
Varnish Backend Tanımlaması ve VCL Yapılandırması
Varnish’in asıl gücü VCL (Varnish Configuration Language) dosyasında yatar. Bu dosya, Varnish’in gelen istekleri nasıl işleyeceğini, hangi arka uç sunucularını kullanacağını ve hangi içeriği önbelleğe alacağını tanımlar.
Varsayılan VCL dosyasını düzenleyelim:
sudo nano /etc/varnish/default.vcl
Dosyanın içeriğini aşağıdaki gibi güncelleyelim. Bu yapılandırma, iki Nginx sunucusunu arka uç olarak tanımlar ve istekleri bunlar arasında dağıtır.
vcl 4.0; # Varnish 4.0 veya üzeri için
Arka uç Nginx sunucularını tanımla
backend web1 {
.host = "192.168.1.11"; # Nginx Sunucusu 1 IP
.port = "8080";
.probe = { # Sağlık kontrolü
.url = "/";
.timeout = 5s;
.interval = 5s;
.window = 5;
.threshold = 3;
}
}
backend web2 {
.host = "192.168.1.12"; # Nginx Sunucusu 2 IP
.port = "8080";
.probe = { # Sağlık kontrolü
.url = "/";
.timeout = 5s;
.interval = 5s;
.window = 5;
.threshold = 3;
}
}
Arka uç sunucularını bir havuza (director) ekleyerek yük dengeleme yapalım
round-robin, basit ve eşit dağılım sağlar.
sub vcl_init {
new web_cluster = directors.round_robin();
web_cluster.add_backend(web1);
web_cluster.add_backend(web2);
}
sub vcl_recv {
# Gelen isteği hangi arka uca yönlendireceğimizi belirle
set req.backend_hint = web_cluster.backend();
# Sağlık kontrolü için özel bir URL'yi doğrudan geçelim
if (req.url == "/varnish-health-check") {
return (pipe); # Bu istekleri doğrudan arka uca ilet, Varnish kendisi işlemesin
}
# Yönetim portuna gelen istekleri (Varnish Stat, Varnishlog vb.) doğrudan geçelim
if (req.method == "PURGE") {
if (!client.ip ~ "localhost") { # Sadece localhost'tan PURGE izni ver
return (synth(405, "Not allowed."));
}
return (purge); # Önbelleği temizle
}
# Sadece GET ve HEAD isteklerini önbelleğe al
if (req.method != "GET" &&
req.method != "HEAD" &&
req.method != "PUT" &&
req.method != "POST" &&
req.method != "TRACE" &&
req.method != "DELETE" &&
req.method != "OPTIONS") {
/ Non-RFC2616 or unknown methods /
return (pipe);
}
if (req.method != "GET" && req.method != "HEAD") {
/ We only deal with GET and HEAD by default /
return (pass);
}
# Cookie içeren istekleri genellikle önbelleğe alma
if (req.http.Cookie) {
return (pass);
}
# Belirli URL'leri önbelleğe alma
if (req.url ~ "^/admin" ||
req.url ~ "^/login" ||
req.url ~ "\.(php|asp|aspx|jsp|cgi)$") { # Dinamik içerik genellikle önbelleğe alınmaz
return (pass);
}
return (hash); # Önbellekte arama yap
}
sub vcl_backend_response {
# Arka uçtan gelen yanıtları işle
# Varsayılan olarak tüm statik içerikleri 1 saat önbelleğe al
if (beresp.ttl == 0s ||
beresp.http.Cache-Control !~ "max-age" &&
beresp.http.Cache-Control !~ "s-maxage") {
if (beresp.http.Content-Type ~ "text/(css|javascript)" ||
beresp.http.Content-Type ~ "image/(jpeg|png|gif|webp)" ||
beresp.http.Content-Type ~ "application/pdf") {
set beresp.ttl = 1h; # Statik dosyalar için varsayılan TTL
}
}
# Set a header to indicate if Varnish served the content
set beresp.http.X-Varnish-Cache = "HIT";
if (beresp.ttl <= 0s || beresp.http.Set-Cookie) {
set beresp.http.X-Varnish-Cache = "MISS";
}
return (deliver);
}
sub vcl_deliver {
# İstemciye yanıtı göndermeden önce başlıkları düzenle
# Varnish'in kendisi tarafından eklenen bazı başlıkları kaldırabiliriz
unset resp.http.X-Varnish;
unset resp.http.Via;
# Hangi Nginx sunucusundan yanıt alındığını gösteren başlığı koruyalım
# set resp.http.X-Varnish-Server = req.backend_hint.host; # Varnish 4'te bu şekilde olmaz.
# Varnish hit/miss bilgisini ekleyelim
if (obj.hits > 0) {
set resp.http.X-Varnish-Cache = "HIT";
} else {
set resp.http.X-Varnish-Cache = "MISS";
}
return (deliver);
}
sub vcl_hit {
if (obj.ttl >= 0s) {
return (deliver); # Önbellekteki nesne hala geçerliyse teslim et
}
return (fetch); # Geçersizse veya süresi dolmuşsa arka uçtan yeniden getir
}
sub vcl_miss {
return (fetch); # Önbellekte yoksa arka uçtan getir
}
sub vcl_pass {
return (fetch); # Doğrudan arka uçtan getir (önbelleğe alma)
}
sub vcl_pipe {
return (pipe); # İstemci ile arka uç arasında doğrudan boru hattı oluştur
}
sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
return (lookup);
}
Bu VCL yapılandırmasında:
* backend blokları Nginx sunucularımızı tanımlar. .probe kısmı, Varnish’in bu sunucuların çalışır durumda olup olmadığını kontrol etmesini sağlar.
* vcl_init içinde directors.round_robin() kullanarak basit bir yük dengeleyici oluşturduk.
* vcl_recv fonksiyonu, gelen HTTP isteklerini işler. Burada, hangi isteğin önbelleğe alınacağını (hash), hangi isteğin doğrudan arka uca iletileceğini (pass) veya hangi isteğin doğrudan boru hattına alınacağını (pipe) belirleyen kurallar tanımlanmıştır. Özellikle cookie içeren istekler veya belirli dinamik URL’ler önbelleğe alınmaz.
* vcl_backend_response fonksiyonu, arka uçtan gelen yanıtları işler. Burada, statik dosyalar için varsayılan bir TTL (Time To Live) ayarlayarak önbellek ömrünü belirledik.
* vcl_deliver fonksiyonu, yanıt istemciye gönderilmeden önce çalışır. Burada, Varnish’in kendi eklediği bazı başlıkları kaldırabiliriz ve önbellek durumunu (X-Varnish-Cache) ekleyebiliriz.
Değişiklikleri kaydedin ve Varnish yapılandırmasını kontrol edin, ardından servisi yeniden başlatın:
sudo varnishd -C -f /etc/varnish/default.vcl
sudo service varnish restart
Adım 4: Kümelenmiş Ortamın Test Edilmesi
Artık Varnish ve Nginx sunucularımız yapılandırıldığına göre, sistemin beklendiği gibi çalışıp çalışmadığını test edebiliriz.
Web Tarayıcısı ile Test
Web tarayıcınızdan Varnish sunucusunun IP adresine (http://192.168.1.10) gidin.
* Sayfayı ilk açtığınızda, Nginx Sunucusu 1 veya Nginx Sunucusu 2’den gelen “Merhaba…” mesajını görmelisiniz.
* Tarayıcınızın geliştirici araçlarını (F12) açarak “Network” sekmesine gidin. Yeniden yükleme yaptığınızda HTTP yanıt başlıklarında X-Nginx-Server başlığını ve X-Varnish-Cache başlığını görmelisiniz.
* X-Nginx-Server: Hangi Nginx sunucusunun yanıt verdiğini gösterir (örn. nginx-server-1 veya nginx-server-2).
* X-Varnish-Cache: MISS ise Varnish önbelleğinde bulunmadı ve arka uçtan getirildi; HIT ise Varnish önbelleğinden sunuldu.
Sayfayı birkaç kez yenilediğinizde, X-Nginx-Server başlığının değiştiğini görmelisiniz (eğer Varnish önbelleğe almadıysa veya önbellek süresi dolduysa), bu da Varnish’in yük dengeleme yaptığını gösterir. Eğer sayfa HIT olarak geliyorsa, Varnish önbellekten sunuyor demektir ve arka uç Nginx’e gitmiyor.
Komut Satırı ile Test
curl komutu ile daha detaylı test yapabiliriz. Varnish sunucusunun IP’sini kullanarak istek gönderelim:
curl -I http://192.168.1.10
Çıktıda aşağıdaki gibi başlıklar görmelisiniz:
HTTP/1.1 200 OK
Server: Nginx
Date: Mon, 28 Oct 2023 10:00:00 GMT
Content-Type: text/html
Content-Length: 100
Last-Modified: Mon, 28 Oct 2023 09:55:00 GMT
ETag: "653cf1c4-64"
X-Nginx-Server: nginx-server-1 # Veya nginx-server-2
X-Varnish: 123456
Age: 0
Via: 1.1 varnish (Varnish/4.0)
X-Varnish-Cache: MISS
Connection: keep-alive
Aynı komutu birkaç kez çalıştırdığınızda, X-Nginx-Server başlığının değiştiğini, X-Varnish-Cache başlığının HIT olabildiğini ve Age başlığının arttığını görmelisiniz.
Nginx Sunucusu Arızasını Simüle Etme
Yüksek erişilebilirliği test etmek için Nginx sunucularından birini durduralım.
Nginx Sunucusu 1 (192.168.1.11) üzerinde:
sudo service nginx stop
Şimdi tekrar Varnish IP’sine istek gönderin (http://192.168.1.10). Sayfa hala yüklenmeli ve tüm isteklerin artık çalışan Nginx Sunucusu 2’den geldiğini (X-Nginx-Server: nginx-server-2) görmelisiniz. Varnish, sağlık kontrolü sayesinde çalışmayan arka ucu otomatik olarak havuzdan çıkaracak ve istekleri sadece çalışan sunucuya yönlendirecektir.
Nginx Sunucusu 1’i tekrar başlatın:
sudo service nginx start
Bir süre sonra (Varnish’in sağlık kontrolü aralığına bağlı olarak), Varnish Sunucusu 1’i tekrar havuza dahil edecektir ve istekler tekrar her iki sunucuya da dağıtılmaya başlayacaktır.
Performans ve Ölçeklenebilirlik İçin Ek İpuçları
Bu temel kurulumu daha da geliştirmek için aşağıdaki ipuçlarını değerlendirebilirsiniz:
* Gelişmiş VCL Kuralları: default.vcl dosyasını uygulamanızın özel ihtiyaçlarına göre özelleştirin. Örneğin, belirli URL’ler için farklı önbellek süreleri ayarlayabilir, çerezleri temizleyebilir veya belirli istekleri doğrudan geçebilirsiniz.
* SSL/TLS Desteği: Varnish, HTTP trafiğini hızlandırmak için tasarlanmıştır ve doğrudan SSL/TLS sonlandırmayı desteklemez. SSL/TLS trafiğini Varnish’e yönlendirmek için Nginx’i bir SSL sonlandırıcı olarak Varnish’in önüne koymanız veya HAProxy gibi bir ters proxy kullanmanız gerekir.
* Varnish Depolama Alanı: VARNISH_STORAGE ayarını (/etc/default/varnish dosyasında) uygulamanızın önbellek ihtiyacına göre ayarlayın. Daha fazla bellek (malloc) veya disk (file) tabanlı depolama kullanabilirsiniz.
* Nginx Optimizasyonu: Nginx sunucularınızı performans için ayarlayın. worker_processes, worker_connections, keepalive_timeout gibi parametreleri uygulamanızın trafiğine göre optimize edin.
* İzleme ve Günlükleme: varnishlog, varnishstat gibi araçlarla Varnish’in performansını izleyin. Nginx erişim günlüklerini (access.log) ve hata günlüklerini (error.log) düzenli olarak kontrol edin. Merkezi bir günlükleme sistemi (örn. ELK Stack) kullanmak, kümelenmiş ortamda sorun gidermeyi kolaylaştırır.
* Güvenlik Duvarı (Firewall): Varnish sunucusunun sadece 80 (veya 443 eğer SSL sonlandırıcı varsa) portundan gelen dış trafiğe izin verdiğinden emin olun. Nginx sunucularının ise sadece Varnish sunucusundan gelen trafiğe (8080 portu üzerinden) izin vermesi önemlidir. UFW (Uncomplicated Firewall) veya iptables kullanabilirsiniz.
* Ölçeklendirme: Trafik arttığında, yeni Nginx sunucuları ekleyerek ve bunları Varnish’in default.vcl dosyasına ekleyerek kolayca ölçeklendirme yapabilirsiniz.
* Dinamik İçerik ve Oturumlar: Dinamik içerik veya kullanıcı oturumları için önbelleğe alma genellikle uygun değildir. Bu tür isteklerin return (pass) ile Varnish’i atlamasını sağlayın. Oturum yönetimi için yapışkan oturumlar (sticky sessions) veya merkezi bir oturum depolama mekanizması (Redis, Memcached) düşünebilirsiniz.
Sorun Giderme ve Yaygın Hatalar
Kurulum sırasında veya sonrasında karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri:
* Varnish Başlamıyor:
* sudo service varnish status komutuyla hatayı kontrol edin.
* /etc/default/varnish ve /etc/varnish/default.vcl dosyalarındaki sözdizimi hatalarını kontrol edin. sudo varnishd -C -f /etc/varnish/default.vcl ile VCL dosyasını test edin.
* Port çakışması: Başka bir servisin 80 portunu kullanıp kullanmadığını kontrol edin (sudo netstat -tulpn | grep :80).
* Nginx Ulaşılamıyor (Varnish Arkasından):
* Nginx sunucularının 8080 portunda dinlediğinden emin olun.
* Nginx sunucularının güvenlik duvarı kurallarının Varnish sunucusundan gelen trafiğe izin verdiğinden emin olun.
* Varnish default.vcl dosyasındaki arka uç IP adreslerinin ve portlarının doğru olduğundan emin olun.
* Varnish Yük Dengeleme Yapmıyor / Hep Aynı Sunucuya Yönlendiriyor:
* Tarayıcınızın önbelleğini temizleyin veya gizli sekmede deneyin.
* X-Varnish-Cache başlığının MISS olduğunu doğrulayın. Eğer HIT ise Varnish önbellekten sunuyor ve arka uca gitmiyor demektir.
* Varnish default.vcl dosyasındaki vcl_recv kurallarını kontrol edin, özellikle cookie ve return (pass) ifadelerini.
* Performans Beklentileri Karşılanmıyor:
* varnishstat ile Varnish istatistiklerini kontrol edin (önbellek isabet oranı, bayt akışı vb.).
* Nginx sunucularının CPU, bellek ve disk kullanımını izleyin.
* Varnish depolama boyutunu artırmayı düşünün.
* VCL kurallarınızı daha agresif önbellekleme için optimize edin.
* Ubuntu 13.10 Eski Sürüm Sorunları: Ubuntu 13.10’un resmi desteği sona erdiği için paket depoları veya belirli paket sürümleriyle ilgili sorunlar yaşanabilir. Bu makaledeki adımlar genel olarak çalışsa da, üretim ortamları için güncel ve desteklenen bir Ubuntu sürümü kullanmanız şiddetle tavsiye edilir.
Sonuç
Bu makalede, Ubuntu 13.10 üzerinde Varnish Cache ve Nginx kullanarak nasıl yüksek performanslı, ölçeklenebilir ve yüksek erişilebilirliğe sahip kümelenmiş bir web sunucusu ortamı oluşturulacağını adım adım öğrendik. Nginx’in web sunucusu olarak gücü ile Varnish’in önbellekleme ve yük dengeleme yeteneklerini birleştirerek, yoğun trafikli web uygulamaları için sağlam bir altyapı kurmuş olduk.
Varnish’in VCL dili sayesinde, önbellekleme davranışını uygulamanızın özel gereksinimlerine göre ince ayar yapabilir, Nginx sunucularını kolayca ölçeklendirebilir ve kullanıcılarınıza kesintisiz bir deneyim sunabilirsiniz. Unutmayın ki bu kurulum temel bir başlangıç noktasıdır ve gerçek dünya üretim ortamları için güvenlik, izleme, otomatik ölçeklendirme ve daha gelişmiş yük dengeleme stratejileri gibi ek katmanların eklenmesi gerekebilir. Ancak bu makaledeki bilgiler, modern web altyapılarının temel taşlarını anlamanız ve uygulamanız için güçlü bir temel oluşturacaktır.