Takip et

Web Sitesi Performansını gzip ve Nginx ile Ubuntu 20.04 Üzerinde Geliştirme

Web Sitesi Performansını gzip ve Nginx ile Ubuntu 20.04 Üzerinde Geliştirme Günümüz dijital dünyasında bir web sitesinin hızı, başarısı

Web Sitesi Performansını gzip ve Nginx ile Ubuntu 20.04 Üzerinde Geliştirme

Günümüz dijital dünyasında bir web sitesinin hızı, başarısı için kritik bir faktördür. Kullanıcılar, yavaş yüklenen siteleri terk etme eğilimindedir ve arama motorları, hızlı siteleri sıralamalarında ödüllendirir. Web sitesi performansını artırmak için kullanılabilecek birçok yöntem arasında, içerik sıkıştırma teknolojileri ve yüksek performanslı web sunucuları öne çıkmaktadır. Bu makalede, gzip sıkıştırma teknolojisini Nginx web sunucusu ile Ubuntu 20.04 işletim sistemi üzerinde nasıl uygulayarak web sitenizin performansını önemli ölçüde artırabileceğinizi detaylı bir şekilde inceleyeceğiz.

Web Sitesi Performansı Neden Önemlidir?

Web sitesi performansının önemi, sadece teknik bir detay olmaktan öte, işletmeler ve kullanıcılar için doğrudan sonuçlar doğuran stratejik bir konudur. Hızlı bir web sitesi, hem kullanıcı deneyimini iyileştirir hem de arama motoru optimizasyonu (SEO) ve dönüşüm oranları üzerinde doğrudan olumlu etkilere sahiptir.

Kullanıcı Deneyimi

Bir web sitesinin yüklenme süresi, kullanıcıların siteyle etkileşimini doğrudan etkiler. Yapılan araştırmalar, bir sayfanın yüklenme süresindeki her saniye gecikmenin, kullanıcı memnuniyetinde ve sayfa görüntüleme sayısında önemli düşüşlere yol açtığını göstermektedir. Kullanıcılar, hızlı yanıt veren siteleri tercih eder; yavaş siteler ise sabırsızlığa ve terk etmeye neden olur. Hızlı bir site, kullanıcıların daha fazla içeriği keşfetmesine, daha uzun süre sitede kalmasına ve genel olarak daha olumlu bir deneyim yaşamasına olanak tanır. Bu, marka sadakati ve müşteri memnuniyeti açısından hayati öneme sahiptir.

SEO (Arama Motoru Optimizasyonu)

Arama motorları, özellikle Google, web sitesi hızını sıralama faktörlerinden biri olarak kabul etmektedir. Daha hızlı yüklenen siteler, arama motoru sonuç sayfalarında (SERP) daha üst sıralarda yer alma eğilimindedir. Bunun nedeni, arama motorlarının kullanıcılarına en iyi deneyimi sunmayı hedeflemesidir. Hızlı siteler, tarayıcılar tarafından daha verimli bir şekilde taranabilir, bu da indeksleme süreçlerini hızlandırır. Dolayısıyla, web sitenizin hızını optimize etmek, organik trafik çekmek ve arama motoru görünürlüğünü artırmak için vazgeçilmez bir adımdır.

Dönüşüm Oranları

E-ticaret siteleri, kurumsal web siteleri ve bloglar dahil olmak üzere her türlü web sitesi için dönüşüm oranları kritik bir metriktir. Dönüşüm, bir kullanıcının sitede istenen bir eylemi (satın alma, form doldurma, bültene abone olma vb.) gerçekleştirmesi anlamına gelir. Yavaş yüklenen sayfalar, potansiyel müşterilerin alışveriş sepetlerini terk etmesine veya bir formu doldurmaktan vazgeçmesine neden olabilir. Hızlı bir web sitesi, kullanıcıların dikkatini dağıtmadan ve sabırlarını zorlamadan dönüşüm hunisinde ilerlemesini sağlar, bu da satışların ve lead’lerin artmasına doğrudan katkıda bulunur.

Sunucu Yükü ve Bant Genişliği Tasarrufu

İçerik sıkıştırma gibi performans optimizasyonları, sadece son kullanıcıya fayda sağlamakla kalmaz, aynı zamanda sunucu kaynakları üzerinde de olumlu etkiler yaratır. Daha küçük dosya boyutları, sunucudan daha az bant genişliği kullanılmasını ve her isteğin daha hızlı tamamlanmasını sağlar. Bu durum, sunucunun aynı anda daha fazla isteği işleyebilmesi anlamına gelir ve sunucu yükünü azaltır. Özellikle yüksek trafikli siteler için bu, maliyet tasarrufu ve daha iyi sunucu kararlılığı demektir.

Performansı Etkileyen Faktörler

Web sitesi performansını etkileyen birçok faktör bulunmaktadır. Bunlar arasında sunucu yanıt süresi, dosya boyutları, ağ gecikmesi, önbellekleme stratejileri ve içerik dağıtım ağları (CDN) kullanımı gibi unsurlar yer alır. Bu makalede odaklanacağımız gzip ve Nginx, özellikle dosya boyutlarını küçülterek ve sunucu yanıt sürelerini optimize ederek bu faktörler üzerinde doğrudan etki yaratmaktadır.

gzip Nedir?

gzip, dosyaları sıkıştırmak ve açmak için kullanılan popüler bir dosya formatı ve yazılım uygulamasıdır. Açılımı “GNU zip” olan gzip, özellikle web üzerindeki metin tabanlı içeriklerin (HTML, CSS, JavaScript, XML, JSON vb.) sıkıştırılması için yaygın olarak kullanılır. Web sunucuları ve istemcileri arasında veri transferini optimize ederek bant genişliği kullanımını azaltır ve sayfa yükleme sürelerini hızlandırır.

gzip Nedir ve Nasıl Çalışır?

gzip, DEFLATE algoritmasını kullanarak verileri sıkıştırır. Bu algoritma, tekrarlanan veri dizilerini bularak ve bunları daha kısa referanslarla değiştirerek çalışır. Örneğin, bir CSS dosyasında birçok kez tekrarlanan “font-family: Arial, sans-serif;” gibi bir ifade, sıkıştırma sırasında tek bir kısa kodla temsil edilebilir. Bu sayede dosyanın toplam boyutu önemli ölçüde küçülür.

Web bağlamında gzip’in çalışma prensibi şu şekildedir:

1. İstemci İsteği: Bir web tarayıcısı (istemci), bir web sayfası veya kaynak (örneğin bir HTML dosyası) talep ettiğinde, HTTP başlıklarında Accept-Encoding: gzip, deflate gibi bir ifade gönderir. Bu başlık, tarayıcının gzip veya deflate sıkıştırmasını desteklediğini ve sıkıştırılmış içeriği kabul edebileceğini sunucuya bildirir.
2. Sunucu Yanıtı: Web sunucusu (örneğin Nginx), istemcinin Accept-Encoding başlığını kontrol eder. Eğer sunucu gzip sıkıştırmasını destekliyorsa ve talep edilen dosya sıkıştırılabilecek bir türdeyse (metin tabanlı), sunucu dosyayı gzip ile sıkıştırır.
3. Sıkıştırılmış İçerik Gönderimi: Sunucu, sıkıştırılmış dosyayı istemciye geri gönderirken, HTTP başlıklarına Content-Encoding: gzip ifadesini ekler. Bu, istemciye gönderilen içeriğin gzip ile sıkıştırıldığını bildirir.
4. İstemci Tarafında Açma: Tarayıcı, Content-Encoding: gzip başlığını gördüğünde, aldığı sıkıştırılmış veriyi otomatik olarak açar ve kullanıcıya görüntüler. Bu işlem genellikle milisaniyeler içinde gerçekleşir ve kullanıcı tarafından fark edilmez.

Bu süreç sayesinde, ağ üzerinden aktarılan veri miktarı azalır, bu da daha hızlı indirme süreleri ve daha iyi bir kullanıcı deneyimi sağlar.

gzip’in Avantajları

* Bant Genişliği Tasarrufu: En belirgin avantajı, aktarılan veri miktarını azaltarak sunucu ve istemci arasındaki bant genişliği kullanımını optimize etmesidir. Bu, özellikle sınırlı bant genişliğine sahip mobil kullanıcılar veya yüksek trafikli web siteleri için önemlidir.
* Daha Hızlı Yükleme Süreleri: Dosya boyutlarının küçülmesi, tarayıcının sayfaları daha hızlı indirmesini ve görüntülemesini sağlar. Bu da kullanıcı deneyimini doğrudan iyileştirir ve terk etme oranlarını düşürür.
* SEO İyileştirmeleri: Web sitesi hızı, arama motoru sıralamasında önemli bir faktör olduğundan, gzip kullanımı SEO performansına olumlu katkıda bulunur.
* Sunucu Yükünü Azaltma: Daha az veri transferi, sunucunun her bir istek için daha az kaynak harcaması anlamına gelir. Bu da sunucunun aynı anda daha fazla isteği karşılamasına olanak tanır.

gzip’in Dezavantajları

* CPU Kullanımı: Dosyaları sıkıştırma ve açma işlemi, hem sunucuda hem de istemcide bir miktar CPU kaynağı tüketir. Ancak modern sunucular ve istemciler için bu ek yük genellikle ihmal edilebilir düzeydedir ve bant genişliği tasarrufunun faydaları yanında önemsiz kalır.
* Binary Dosyalar: Resimler (JPEG, PNG, GIF), videolar (MP4, WebM) veya PDF’ler gibi zaten sıkıştırılmış binary dosyaları gzip ile sıkıştırmak genellikle fayda sağlamaz. Hatta bazı durumlarda dosya boyutunu artırabilir bile. Bu tür dosyalar için farklı optimizasyon teknikleri (örneğin, resim optimizasyonu veya WebP formatı kullanımı) tercih edilmelidir. gzip, en iyi performansı metin tabanlı dosyalar üzerinde gösterir.

Nginx Nedir?

Nginx (engine-x olarak telaffuz edilir), Igor Sysoev tarafından geliştirilen, açık kaynaklı, yüksek performanslı bir web sunucusu, ters proxy, yük dengeleyici ve HTTP önbelleğidir. Özellikle yüksek eşzamanlı bağlantıları ve statik içerik sunumunu verimli bir şekilde yönetme yeteneği ile tanınır.

Nginx Nedir ve Özellikleri Nelerdir?

Nginx, geleneksel Apache gibi süreç tabanlı sunucuların aksine, olay tabanlı (event-driven) ve asenkron bir mimariye sahiptir. Bu mimari, Nginx’in çok sayıda eşzamanlı bağlantıyı düşük bellek kullanımıyla ve yüksek performansla yönetmesini sağlar.

Temel Özellikleri:

* Yüksek Performans: Nginx, özellikle statik dosyaların (HTML, CSS, JS, resimler) sunumunda olağanüstü performans sergiler. Olay tabanlı mimarisi sayesinde, her bir bağlantı için ayrı bir süreç veya iş parçacığı oluşturmak yerine, tek bir süreç içinde binlerce bağlantıyı yönetebilir.
* Düşük Kaynak Tüketimi: Apache gibi sunuculara kıyasla daha az bellek ve CPU kaynağı kullanır. Bu, daha küçük sunucularda bile yüksek trafikli sitelerin barındırılmasına olanak tanır.
* Ters Proxy (Reverse Proxy): Nginx, gelen istemci isteklerini alıp bunları arka uç sunucularına (örneğin uygulama sunucuları, veritabanı sunucuları) iletebilir. Bu, güvenlik, yük dengeleme ve önbellekleme gibi avantajlar sağlar.
* Yük Dengeleyici (Load Balancer): Gelen trafiği birden fazla arka uç sunucusu arasında dağıtarak, sunucuların aşırı yüklenmesini engeller ve uygulamanın ölçeklenebilirliğini ve güvenilirliğini artırır.
* HTTP Önbellekleme: Nginx, sık erişilen içerikleri önbelleğinde saklayarak, sonraki isteklerde bu içeriği doğrudan önbellekten sunabilir. Bu, arka uç sunucularına olan yükü azaltır ve yanıt sürelerini önemli ölçüde hızlandırır.
* SSL/TLS Desteği: Güvenli iletişim için SSL/TLS şifrelemesini destekler ve bu işlemi verimli bir şekilde yönetebilir.
* Modüler Yapı: Nginx, çeşitli işlevleri yerine getiren modüllerden oluşur. Bu modüller, Nginx’in esnekliğini ve genişletilebilirliğini sağlar. gzip sıkıştırması da bu modüllerden biri aracılığıyla sağlanır.
* WebSockets Desteği: Gerçek zamanlı uygulamalar için WebSockets protokolünü destekler.

Nginx, özellikle yüksek trafikli web siteleri, CDN’ler ve API ağ geçitleri gibi performansın kritik olduğu ortamlarda tercih edilen bir çözümdür. Basit bir web sunucusu olmanın ötesinde, modern web mimarilerinin temel bir bileşenidir.

Ubuntu 20.04 Üzerinde Nginx Kurulumu

gzip sıkıştırmasını Nginx ile kullanabilmek için öncelikle bir Ubuntu 20.04 sunucusuna Nginx kurmanız gerekmektedir. Bu bölüm, temel kurulum adımlarını ve Nginx’in ilk yapılandırmasını kapsayacaktır.

Temel Sistem Kurulumu

Nginx kurulumuna başlamadan önce, sisteminizin güncel olduğundan emin olmak iyi bir uygulamadır.

1. Sistem Paket Listesini Güncelleme:
Sunucunuzdaki paket listesini en son sürümlere göre güncelleyin:

sudo apt update

2. Sistem Paketlerini Yükseltme:
Mevcut paketleri en yeni sürümlerine yükseltin. Bu işlem biraz zaman alabilir:

sudo apt upgrade -y

Nginx Kurulumu

Ubuntu’nun varsayılan depolarında Nginx mevcuttur. Kurulum oldukça basittir:

sudo apt install nginx -y

Bu komut Nginx’i kuracak ve sistem başlangıcında otomatik olarak başlamasını sağlayacaktır.

Güvenlik Duvarı (UFW) Yapılandırması

Eğer sunucunuzda UFW (Uncomplicated Firewall) etkinse, Nginx’in gelen bağlantıları kabul edebilmesi için güvenlik duvarını yapılandırmanız gerekir.

1. UFW Uygulama Profillerini Listeleme:
Nginx kurulumu, UFW’ye otomatik olarak bazı uygulama profilleri ekler:

sudo ufw app list

Çıktı aşağıdaki gibi olmalıdır:

Available applications:
      Nginx Full
      Nginx HTTP
      Nginx HTTPS
      OpenSSH

* Nginx HTTP: Yalnızca 80 numaralı bağlantı noktasını (HTTP) açar.
* Nginx HTTPS: Yalnızca 443 numaralı bağlantı noktasını (HTTPS) açar.
* Nginx Full: Hem 80 (HTTP) hem de 443 (HTTPS) numaralı bağlantı noktalarını açar.

2. Nginx Full Profilini Etkinleştirme:
Hem HTTP hem de HTTPS trafiğine izin vermek için Nginx Full profilini etkinleştirin:

sudo ufw allow 'Nginx Full'

3. UFW Durumunu Kontrol Etme:
Güvenlik duvarının doğru şekilde yapılandırıldığından emin olmak için durumunu kontrol edin:

sudo ufw status

Çıktıda Nginx Full veya Nginx HTTP ve Nginx HTTPS kurallarının ALLOW olarak listelendiğini görmelisiniz.

Nginx Durumunu Kontrol Etme

Kurulumdan sonra Nginx servisinin çalışıp çalışmadığını kontrol edebilirsiniz:

systemctl status nginx

Eğer her şey yolundaysa, çıktıda active (running) ibaresini görmelisiniz.

Tarayıcınızda sunucunuzun IP adresini (veya alan adını) ziyaret ederek Nginx’in varsayılan karşılama sayfasını görmelisiniz. Bu, Nginx’in başarıyla kurulduğunu ve çalıştığını gösterir.

Nginx ile gzip Yapılandırması

Nginx, gzip sıkıştırmasını destekleyen yerleşik bir modül olan ngx_http_gzip_module ile birlikte gelir. Bu modül genellikle varsayılan olarak derlenmiş ve kullanıma hazırdır. gzip’i etkinleştirmek ve yapılandırmak için Nginx’in yapılandırma dosyalarını düzenlemeniz gerekmektedir.

Nginx gzip Modülü Temelleri

Nginx’in ana yapılandırma dosyası /etc/nginx/nginx.conf konumundadır. Bu dosya, global Nginx ayarlarını içerir. gzip ayarlarını bu dosyanın http bloğuna eklemek, sıkıştırmayı tüm sanal ana bilgisayarlar (server blokları) için etkinleştirmenin en yaygın ve önerilen yoludur. Alternatif olarak, belirli bir server veya location bloğu içinde de gzip ayarlarını yapabilirsiniz, ancak bu, genellikle özel durumlar için kullanılır.

gzip Yapılandırma Adımları

1. Nginx Yapılandırma Dosyasını Açma:
Ana Nginx yapılandırma dosyasını bir metin düzenleyici ile açın. nano kullanabilirsiniz:

sudo nano /etc/nginx/nginx.conf

2. gzip Ayarlarını Ekleme veya Düzenleme:
Dosyanın içindeki http { ... } bloğunu bulun. Bu bloğun içine aşağıdaki gzip ayarlarını ekleyin veya mevcut ayarları düzenleyin. Eğer zaten bir gzip on; satırı varsa, diğer ayarları altına ekleyebilirsiniz.

http {
        # ... diğer http ayarları ...

        gzip on;
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_min_length 256;
        gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml application/vnd.ms-fontobject application/x-font-ttf font/opentype;

        # ... diğer http ayarları ...
    }

Bu ayarların her birini açıklayalım:

* gzip on;: gzip sıkıştırmasını etkinleştirir. Bu olmadan diğer ayarların bir anlamı olmayacaktır.
* gzip_vary on;: Vary: Accept-Encoding HTTP başlığını yanıtınıza ekler. Bu, proxy sunucularına ve önbelleklere, içeriğin sıkıştırılmış ve sıkıştırılmamış versiyonlarının farklı olduğunu bildirir. Bu, önbellekleme sorunlarını önlemek için önemlidir.
* gzip_proxied any;: Proxy sunucularının arkasından gelen istekler için de gzip sıkıştırmasını etkinleştirir. Varsayılan olarak Nginx, proxy’lenmiş isteklere sıkıştırma uygulamaz. any değeri, tüm proxy’lenmiş istekleri sıkıştırır.
* gzip_comp_level 6;: Sıkıştırma seviyesini belirler. 1 (en hızlı, en az sıkıştırma) ile 9 (en yavaş, en fazla sıkıştırma) arasında bir değerdir. 6, CPU kullanımı ve sıkıştırma oranı arasında iyi bir denge sağlar. Genellikle bu değer önerilir.
* gzip_buffers 16 8k;: Sıkıştırma için kullanılan bellek tamponlarının sayısını ve boyutunu ayarlar. Burada 16 adet 8 kilobaytlık tampon kullanılır. Çoğu durumda varsayılan değerler yeterlidir.
* gzip_http_version 1.1;: Nginx’in gzip sıkıştırması için minimum HTTP protokol versiyonunu belirler. HTTP/1.0 ile bazı eski tarayıcılarda sorunlar yaşanabileceği için 1.1 veya daha yüksek bir versiyon kullanmak önerilir.
* gzip_min_length 256;: Sıkıştırılacak minimum dosya boyutunu bayt cinsinden belirler. Çok küçük dosyaları sıkıştırmak, sıkıştırma işleminin getirdiği CPU yükü nedeniyle faydasız olabilir. Genellikle 256 bayt veya 1KB gibi bir değer kullanılır.
* gzip_types ...;: Hangi MIME türlerinin sıkıştırılacağını belirler. Yalnızca metin tabanlı dosya türlerini (HTML, CSS, JS, XML, JSON, SVG, fontlar vb.) listelemelisiniz. Zaten sıkıştırılmış olan resim (JPEG, PNG), video veya PDF gibi binary dosya türlerini buraya eklemekten kaçının, çünkü bu dosya boyutunu artırabilir ve CPU kaynaklarını boşa harcayabilir. Yukarıdaki örnek, yaygın olarak sıkıştırılan türleri içerir.

3. Yapılandırmayı Kaydetme ve Çıkma:
nano kullanıyorsanız, Ctrl+O tuşlarına basarak dosyayı kaydedin ve Enter tuşuna basın. Ardından Ctrl+X tuşlarına basarak düzenleyiciden çıkın.

4. Yapılandırma Sözdizimini Test Etme:
Nginx yapılandırma dosyanızda herhangi bir sözdizimi hatası olup olmadığını kontrol etmek çok önemlidir. Hatalı bir yapılandırma, Nginx’in başlamamasına neden olabilir:

sudo nginx -t

Eğer her şey yolundaysa, test is successful veya syntax is ok gibi bir mesaj görmelisiniz. Herhangi bir hata varsa, hatayı düzeltmeniz gerekir.

5. Nginx’i Yeniden Başlatma:
Yapılandırma değişikliklerinin etkili olması için Nginx servisini yeniden başlatmanız gerekir:

sudo systemctl restart nginx

Bu komut, Nginx’i durdurur ve yeni yapılandırma ile tekrar başlatır.

Artık Nginx sunucunuz, belirtilen dosya türlerini gzip kullanarak sıkıştıracak ve bu da web sitenizin performansını artıracaktır.

gzip Sıkıştırmasını Doğrulama

Nginx’i yapılandırdıktan ve yeniden başlattıktan sonra, gzip sıkıştırmasının gerçekten çalışıp çalışmadığını kontrol etmek önemlidir. Bunu yapmanın birkaç yolu vardır: tarayıcı geliştirici araçlarını kullanmak, komut satırı araçları veya çevrimiçi performans test araçları.

Tarayıcı Geliştirici Araçlarını Kullanma

En yaygın ve görsel yöntem, modern web tarayıcılarının (Chrome, Firefox, Edge, Safari) yerleşik geliştirici araçlarını kullanmaktır.

1. Tarayıcınızı Açın ve Web Sitenizi Ziyaret Edin:
Kontrol etmek istediğiniz web sitesini tarayıcınızda açın.
2. Geliştirici Araçlarını Açın:
* Chrome/Edge: F12 tuşuna basın veya sağ tıklayıp “İncele” (Inspect) seçeneğini seçin.
* Firefox: F12 tuşuna basın veya sağ tıklayıp “Öğeyi İncele” (Inspect Element) seçeneğini seçin.
* Safari: Safari menüsünden “Geliştir” (Develop) -> “Web Denetçisini Göster” (Show Web Inspector) seçeneğini seçin (Geliştir menüsü görünmüyorsa, Ayarlar -> İleri Düzey -> Menü çubuğunda Geliştir menüsünü göster seçeneğini etkinleştirmeniz gerekebilir).
3. Ağ (Network) Sekmesine Gidin:
Geliştirici araçları panelinde “Network” (Ağ) sekmesini seçin.
4. Sayfayı Yenileyin:
Ağ sekmesi açıkken sayfayı yenileyin (Ctrl+R veya F5). Bu, tarayıcının tüm kaynakları yeniden yüklemesini sağlayacaktır.
5. Bir Kaynağı İnceleyin:
Ağ sekmesinde listelenen kaynaklardan (örneğin, ana HTML dosyası, bir CSS dosyası, bir JavaScript dosyası) birine tıklayın.
6. Yanıt Başlıklarını Kontrol Edin:
Seçtiğiniz kaynağın detayları genellikle sağ panelde açılır. “Headers” (Başlıklar) sekmesine gidin. “Response Headers” (Yanıt Başlıkları) bölümünde Content-Encoding: gzip başlığını arayın.

Eğer bu başlığı görüyorsanız, o kaynak için gzip sıkıştırması başarılı bir şekilde uygulanmıştır. Ayrıca, “Size” (Boyut) sütununda orijinal boyut ve sıkıştırılmış boyut arasındaki farkı da görebilirsiniz, bu da sıkıştırmanın ne kadar etkili olduğunu gösterir.

Komut Satırı Araçları (curl) Kullanma

curl komutu, web sunucularından veri almak ve HTTP başlıklarını incelemek için güçlü bir araçtır.

1. Terminali Açın:
Sunucunuzda veya yerel makinenizde bir terminal açın.
2. curl Komutunu Çalıştırın:
Aşağıdaki komutu kullanarak web sitenizden bir kaynak isteyin ve yanıt başlıklarını inceleyin:

curl -I -H "Accept-Encoding: gzip" http://your_domain.com/index.html

* -I: Yalnızca HTTP başlıklarını gösterir (gövde içeriğini indirmez).
* -H "Accept-Encoding: gzip": Sunucuya gzip sıkıştırmasını kabul ettiğinizi bildiren bir başlık gönderir.

Komutun çıktısında Content-Encoding: gzip başlığını arayın. Örneğin:

HTTP/1.1 200 OK
    Server: nginx/1.18.0 (Ubuntu)
    Date: Wed, 25 Oct 2023 10:00:00 GMT
    Content-Type: text/html
    Content-Length: 1234
    Last-Modified: Tue, 24 Oct 2023 09:00:00 GMT
    Connection: keep-alive
    ETag: "6537a4d0-4d2"
    Content-Encoding: gzip

Eğer Content-Encoding: gzip satırını görüyorsanız, gzip sıkıştırması çalışıyor demektir.

Çevrimiçi Araçlar

Birçok çevrimiçi araç, web sitesi performansını analiz ederken gzip sıkıştırmasının etkin olup olmadığını da kontrol eder.

* GTmetrix: Web sitenizin URL’sini girin. Raporun “Performance” veya “Structure” bölümünde gzip sıkıştırmasının durumu hakkında bilgi bulacaksınız.
* Google PageSpeed Insights: Google’ın kendi aracıdır. Web sitenizi analiz eder ve sıkıştırma ile ilgili önerilerde bulunur.
* Pingdom Tools: Benzer şekilde, site hızınızı test eder ve sıkıştırma durumunu gösterir.

Bu araçlar, sitenizin genel performansına kapsamlı bir bakış sunarken, gzip’in doğru şekilde uygulandığını doğrulamanıza da yardımcı olur. Herhangi bir araç, gzip’in etkin olmadığını belirtiyorsa, Nginx yapılandırmanızı ve hata günlüklerinizi tekrar kontrol etmelisiniz.

En İyi Uygulamalar ve Ek Optimizasyonlar

gzip sıkıştırmasını Nginx ile yapılandırmak, web sitesi performansını artırmanın önemli bir adımıdır. Ancak, performansı daha da iyileştirmek için uygulanabilecek başka en iyi uygulamalar ve optimizasyonlar da bulunmaktadır.

gzip Sıkıştırma Seviyesi (gzip_comp_level)

gzip_comp_level ayarı, sıkıştırma oranı ile CPU kullanımı arasında bir denge kurar.

* 1 (en düşük sıkıştırma, en hızlı): En az CPU kullanır ancak en az sıkıştırma sağlar.
* 9 (en yüksek sıkıştırma, en yavaş): En fazla CPU kullanır ancak en iyi sıkıştırma oranını sunar.
* 6 (önerilen): Çoğu durumda, 6 numaralı sıkıştırma seviyesi, CPU kullanımı ve sıkıştırma oranı arasında ideal bir denge sağlar. Genellikle, 6’dan daha yüksek seviyelere çıkmak, CPU kullanımını önemli ölçüde artırırken sıkıştırma oranında sadece marjinal bir iyileşme sağlar. Bu nedenle, varsayılan olarak 6 kullanılması tavsiye edilir.

gzip_min_length Ayarı

gzip_min_length direktifi, Nginx’in sıkıştırması gereken minimum dosya boyutunu bayt cinsinden belirler.

* Neden Önemli? Çok küçük dosyaları sıkıştırmak, sıkıştırma işleminin getirdiği CPU yükü nedeniyle faydasız olabilir. Sıkıştırma algoritmasının kendisi ve eklenen başlıklar, dosyanın orijinal boyutundan daha büyük olmasına neden olabilir.
* Önerilen Değer: Genellikle 256 bayt veya 1KB (1024 bayt) gibi bir değer kullanılır. Bu, Nginx’in gereksiz yere küçük dosyaları sıkıştırmakla uğraşmasını engeller ve sunucu kaynaklarından tasarruf sağlar.

gzip_types Ayarı

gzip_types direktifi, hangi MIME türlerinin sıkıştırılacağını tanımlar.

* Sadece Metin Tabanlı Dosyalar: Yalnızca metin tabanlı dosya türlerini (HTML, CSS, JavaScript, JSON, XML, SVG, fontlar) sıkıştırmalısınız.
* Binary Dosyalardan Kaçının: Resimler (JPEG, PNG, GIF), videolar (MP4, WebM) veya PDF’ler gibi zaten sıkıştırılmış olan binary dosya türlerini buraya eklemekten kesinlikle kaçının. Bu tür dosyaları tekrar sıkıştırmak, hem CPU kaynaklarını boşa harcar hem de dosya boyutunu artırabilir. Nginx’in varsayılan olarak text/html‘i sıkıştırdığını unutmayın, bu yüzden bunu gzip_types listesine eklemenize gerek yoktur.

Önbellekleme (Caching)

gzip, dosya boyutlarını küçültürken, tarayıcı önbelleklemesi (browser caching) ve sunucu tarafı önbellekleme (server-side caching) de sayfa yükleme sürelerini önemli ölçüde hızlandırır.

* Tarayıcı Önbelleklemesi: Nginx ile Expires ve Cache-Control HTTP başlıklarını ayarlayarak tarayıcının statik dosyaları (CSS, JS, resimler) belirli bir süre boyunca yerel olarak depolamasını sağlayabilirsiniz. Bu, kullanıcının aynı sayfayı veya siteyi tekrar ziyaret ettiğinde bu dosyaların sunucudan yeniden indirilmesini engeller.

location ~* \.(jpg|jpeg|gif|png|webp|svg|ico|css|js|woff|woff2|ttf|eot)$ {
        expires 30d; # 30 gün boyunca önbellekte tut
        add_header Cache-Control "public, no-transform";
    }

Bu örnek, belirli dosya türlerini 30 gün boyunca önbellekte tutar.
* Nginx FastCGI/Proxy Önbelleklemesi: Dinamik içerikler (örneğin PHP uygulamalarından gelen çıktılar) için Nginx’i bir önbellek sunucusu olarak yapılandırabilirsiniz. Bu, aynı dinamik içeriğin tekrar talep edilmesi durumunda, uygulamanın yeniden çalıştırılması yerine önbellekten servis edilmesini sağlar.

HTTP/2 Kullanımı

HTTP/2, HTTP protokolünün yeni bir versiyonudur ve web performansını önemli ölçüde iyileştiren birçok özellik sunar.

* Multiplexing: Aynı TCP bağlantısı üzerinden birden fazla isteği eş zamanlı olarak göndermeye olanak tanır, bu da başlık engellemesini (head-of-line blocking) ortadan kaldırır.
* Header Compression: HTTP başlıklarını sıkıştırarak veri aktarımını daha verimli hale getirir.
* Server Push: Sunucunun, istemci tarafından henüz talep edilmemiş olsa bile, gelecekte ihtiyaç duyulacağını bildiği kaynakları proaktif olarak göndermesine olanak tanır.
* Nginx ile HTTP/2: Nginx, SSL/TLS ile birlikte HTTP/2 desteği sunar. Bunu etkinleştirmek için Nginx yapılandırmanızdaki listen direktifine http2 parametresini eklemeniz yeterlidir:

listen 443 ssl http2;

HTTP/2 için SSL/TLS sertifikası gereklidir. Let’s Encrypt gibi hizmetlerle ücretsiz SSL sertifikaları alabilirsiniz.

Statik Dosya Sunumu

Nginx, statik dosyaları sunmak için inanılmaz derecede verimli bir sunucudur. Web sitenizin mümkün olduğunca çok içeriğini statik hale getirmeye çalışın. Dinamik olarak üretilen içerikleri de (örneğin CMS sayfaları) önbelleğe alarak statik gibi davranmasını sağlayabilirsiniz.

Diğer Optimizasyonlar

* Resim Optimizasyonu: Resimleri sıkıştırın, doğru formatı kullanın (JPEG fotoğraflar için, PNG şeffaflık için), WebP gibi modern formatları tercih edin ve duyarlı resimler kullanın.
* CSS/JS Minify Etme: CSS ve JavaScript dosyalarındaki gereksiz boşlukları, yorumları ve satır sonlarını kaldırarak dosya boyutlarını küçültün.
* CDN (Content Delivery Network) Kullanımı: Web sitenizin statik varlıklarını (resimler, CSS, JS) dünyanın farklı coğrafi konumlarındaki sunucularda önbelleğe alarak, kullanıcıya en yakın sunucudan servis edilmesini sağlayın. Bu, ağ gecikmesini azaltır ve yükleme sürelerini hızlandırır.
* DNS Öncesi Getirme (DNS Prefetching): rel="dns-prefetch" özniteliğini kullanarak tarayıcının harici kaynakların DNS çözümlemesini önceden yapmasını sağlayın.
* Gereksiz Eklentileri ve Komut Dosyalarını Kaldırma: Web sitenizde kullanmadığınız veya performansı olumsuz etkileyen eklentileri veya JavaScript komut dosyalarını kaldırın.

Bu optimizasyonları birleştirerek, gzip ve Nginx’in sağladığı temel performans artışını daha da güçlendirebilir ve kullanıcılarınıza mümkün olan en hızlı web deneyimini sunabilirsiniz.

Yaygın Sorun Giderme

gzip sıkıştırmasını Nginx ile yapılandırırken veya doğrularken bazı sorunlarla karşılaşabilirsiniz. İşte sıkça karşılaşılan sorunlar ve olası çözümleri:

gzip Çalışmıyor

Nginx’i yapılandırdıktan sonra gzip’in etkin olmadığını fark ederseniz, aşağıdaki adımları kontrol edin:

1. Nginx Yeniden Başlatıldı mı?
Yapılandırma değişikliklerinin uygulanması için Nginx’i yeniden başlatmanız gerekir:

sudo systemctl restart nginx

reload komutu bazen yeterli olsa da, özellikle modül ayarlarında kapsamlı değişiklikler yapıldığında restart daha güvenlidir.
2. Yapılandırma Sözdizimi Doğru mu?
Nginx yapılandırma dosyanızda bir sözdizimi hatası, Nginx’in başlamamasına veya beklendiği gibi çalışmamasına neden olabilir.

sudo nginx -t

Bu komutun syntax is ok veya test is successful çıktısı verdiğinden emin olun. Hata mesajı alırsanız, belirtilen satırı kontrol edin ve düzeltin.
3. gzip on; Ayarı Mevcut mu?
/etc/nginx/nginx.conf dosyasındaki http bloğunda veya ilgili server/location bloğunda gzip on; direktifinin etkin olduğundan emin olun.
4. gzip_types İçinde Doğru MIME Türleri Var mı?
Sıkıştırmaya çalıştığınız dosya türünün (örneğin text/css veya application/javascript) gzip_types listesinde olduğundan emin olun. Unutmayın, text/html varsayılan olarak sıkıştırılır ve listede olmasına gerek yoktur.
5. Dosya gzip_min_length‘den Büyük mü?
Sıkıştırmaya çalıştığınız dosyanın boyutu, gzip_min_length direktifinde belirtilen minimum boyuttan büyük olmalıdır. Örneğin, gzip_min_length 256; ise, 200 baytlık bir dosya sıkıştırılmaz.
6. Tarayıcı Accept-Encoding: gzip Başlığı Gönderiyor mu?
Tarayıcınızın veya test aracınızın Accept-Encoding: gzip başlığını sunucuya gönderdiğinden emin olun. Tarayıcı geliştirici araçları veya curl -I -H "Accept-Encoding: gzip" ... komutu ile bunu kontrol edebilirsiniz. Çok eski veya özel istemciler bu başlığı göndermeyebilir.
7. Önbellekleme Katmanları:
Eğer Nginx’in önünde başka bir ters proxy, CDN veya önbellekleme katmanı varsa, bu katmanların gzip sıkıştırmasını doğru şekilde işlediğinden emin olun. Bazen bu ara katmanlar Accept-Encoding başlığını çıkarabilir veya sıkıştırmayı kendileri yapmaya çalışabilir. gzip_proxied any; ayarının etkin olduğundan emin olun.

Yüksek CPU Kullanımı

gzip sıkıştırması, özellikle yüksek trafikli sitelerde veya çok yüksek sıkıştırma seviyeleri kullanıldığında sunucu CPU kullanımını artırabilir.

1. gzip_comp_level Düşürmeyi Dene:
Eğer gzip_comp_level değerini 7, 8 veya 9 olarak ayarladıysanız, bunu 6’ya düşürmeyi deneyin. Genellikle 6, CPU kullanımı ile sıkıştırma oranı arasında iyi bir denge sunar. Daha düşük seviyeler (örneğin 4) daha da az CPU kullanır ancak sıkıştırma oranı da düşer.
2. gzip_min_length Artırmayı Dene:
Çok küçük dosyaları sıkıştırmak gereksiz CPU döngülerine neden olabilir. gzip_min_length değerini 1024 (1KB) veya 2048 (2KB) gibi daha yüksek bir değere ayarlayarak, sadece sıkıştırmanın gerçekten faydalı olacağı dosyaların işlenmesini sağlayın.
3. gzip_types Listesini Gözden Geçir:
Sadece metin tabanlı dosyaları sıkıştırdığınızdan emin olun. Resim, video gibi binary dosyaları sıkıştırma listesinden çıkarın. Bu tür dosyaları sıkıştırmak CPU’yu boşa harcar ve dosya boyutunu artırabilir.

Önbellekleme Sorunları

gzip ile önbellekleme arasında çakışmalar yaşanabilir, özellikle ara proxy sunucuları kullanılıyorsa.

1. gzip_vary on; Ayarının Etkin Olduğundan Emin Ol:
Bu ayar, Nginx’in yanıt başlıklarına Vary: Accept-Encoding eklemesini sağlar. Bu başlık, proxy sunucularına ve istemci önbelleklerine, aynı URL için sıkıştırılmış ve sıkıştırılmamış içeriklerin farklı olduğunu bildirir. Bu, yanlış içeriğin önbelleğe alınmasını veya sunulmasını önler.
2. CDN veya Harici Önbellek Ayarları:
Eğer bir CDN veya başka bir harici önbellekleme hizmeti kullanıyorsanız, bu hizmetlerin de Vary: Accept-Encoding başlığını doğru şekilde işlediğinden ve sıkıştırmayı desteklediğinden emin olun. Bazı CDN’ler gzip sıkıştırmasını kendi başlarına yapabilir ve Nginx’in sıkıştırma ayarlarıyla çakışabilir. Bu durumda, Nginx’teki gzip’i devre dışı bırakıp CDN’in sıkıştırma özelliğini kullanmak daha verimli olabilir.

Bu sorun giderme adımları, gzip ve Nginx yapılandırmanızdaki yaygın sorunları tespit etmenize ve çözmenize yardımcı olacaktır. Herhangi bir değişiklik yaptıktan sonra daima sudo nginx -t ile yapılandırmayı test etmeyi ve sudo systemctl restart nginx ile Nginx’i yeniden başlatmayı unutmayın.

Sonuç

Web sitesi performansı, günümüzün rekabetçi dijital ortamında bir lüks değil, bir zorunluluktur. Kullanıcıların beklentileri giderek artarken, arama motorları da hızlı ve verimli web sitelerini ödüllendirmektedir. Bu makalede ele aldığımız gzip sıkıştırma teknolojisi ve Nginx web sunucusu, Ubuntu 20.04 üzerinde bu performans hedeflerine ulaşmak için güçlü ve etkili bir kombinasyon sunmaktadır.

gzip, metin tabanlı içeriklerin (HTML, CSS, JavaScript) boyutunu önemli ölçüde küçülterek bant genişliği kullanımını azaltır ve dosya indirme sürelerini hızlandırır. Nginx ise olay tabanlı mimarisi sayesinde bu sıkıştırılmış içerikleri yüksek verimlilikle sunarak sunucu yükünü minimumda tutar ve eşzamanlı bağlantıları sorunsuz bir şekilde yönetir. Bu iki teknolojinin birleşimi, web sitenizin yüklenme sürelerini gözle görülür şekilde iyileştirerek kullanıcı deneyimini zenginleştirir ve arama motoru sıralamalarınız üzerinde olumlu bir etki yaratır.

Makale boyunca, Ubuntu 20.04 üzerinde Nginx kurulumundan, gzip modülünün etkinleştirilmesine ve yapılandırılmasına kadar adım adım ilerledik. gzip on;, gzip_vary on;, gzip_comp_level 6; ve gzip_types gibi temel direktiflerin doğru şekilde ayarlanması, sıkıştırmanın verimli bir şekilde çalışmasını sağlar. Ayrıca, tarayıcı geliştirici araçları, curl komutu ve çevrimiçi performans test araçları gibi yöntemlerle gzip sıkıştırmasının başarıyla uygulandığını doğrulamanın önemini vurguladık.

Performansı daha da artırmak için gzip sıkıştırma seviyesi ve minimum dosya boyutu gibi ayarların ince ayarı, tarayıcı önbelleklemesi, HTTP/2 protokolü kullanımı, statik dosya optimizasyonu ve CDN entegrasyonu gibi ek optimizasyon tekniklerine de değindik. Bu bütünsel yaklaşım, web sitenizin potansiyelini tam olarak ortaya çıkarmanıza yardımcı olacaktır.

Son olarak, yapılandırma hataları, yüksek CPU kullanımı veya önbellekleme sorunları gibi karşılaşılabilecek yaygın sorunlara yönelik pratik çözümler sunarak, optimizasyon sürecini daha sorunsuz hale getirmeyi amaçladık.

Unutmayın ki web performansı, sürekli bir optimizasyon sürecidir. Teknolojiler geliştikçe ve kullanıcı beklentileri değiştikçe, web sitenizin performansını düzenli olarak gözden geçirmek ve iyileştirmek önemlidir. gzip ve Nginx ile attığınız bu adım, daha hızlı, daha verimli ve daha kullanıcı dostu bir web sitesi oluşturma yolculuğunuzda sağlam bir temel oluşturacaktı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

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.