Merhaba arkadaşlar, bugün sizlere web sunucunuzun performansını gözle görülür şekilde artıracak, basit ama çok etkili bir optimizasyondan bahsedeceğim: Nginx'te Gzip sıkıştırması. Özellikle CSS, JavaScript ve HTML gibi metin tabanlı dosyalarınızı sıkıştırarak, kullanıcılarınıza çok daha hızlı bir site deneyimi sunabilirsiniz. Bu, hem kullanıcı memnuniyetini hem de SEO puanlarınızı olumlu etkiler. Benim yönettiğim tüm sunucularda ilk yaptığım ayarlardan biridir.
Gzip Sıkıştırması Nedir?
Gzip, web sunucusu ile tarayıcı arasında gönderilen içeriği sıkıştırmak için kullanılan bir yöntemdir. Sunucu dosyayı sıkıştırır, tarayıcı ise aldığı bu sıkıştırılmış paketi açar ve gösterir. Bu sayede ağ üzerinden çok daha az veri transferi olur, sayfa yüklenme süreleri kısalır. CSS, JS, HTML, XML ve JSON gibi dosyalar bu sıkıştırmadan en yüksek verimi alır.
Nginx'te Gzip'i Etkinleştirme
Nginx'te Gzip varsayılan olarak kapalı gelebilir. Ayarları yapılandırmak için ana Nginx konfigürasyon dosyasını veya ilgili site konfigürasyon dosyasını (örneğin /etc/nginx/sites-available/siteniz.com) düzenlememiz gerekiyor. Ben genelde tüm siteleri etkilemesi için ana konfigürasyon dosyasını tercih ederim.
Öncelikle, düzenleyeceğimiz dosyayı bir metin editörüyle (nano veya vim) açalım.
Dosya içinde `http {` bloğunu bulun. Bu blok içine aşağıdaki Gzip ayarlarını ekleyelim. Eğer zaten bazı Gzip satırları varsa, onları aşağıdakilerle değiştirebilir veya düzenleyebilirsiniz.
Şimdi bu ayarların ne anlama geldiğine kısaca bakalım:
- gzip on;: Gzip sıkıştırmasını açar.
- gzip_vary on;: Tarayıcıya "Vary: Accept-Encoding" başlığını gönderir, bu da önbellekleme (cache) için önemlidir.
- gzip_proxied any;: Ters proxy'den gelen istekler de dahil olmak üzere her türlü yanıtı sıkıştırmaya çalışır.
- gzip_comp_level 6;: Sıkıştırma seviyesi (1-9 arası). 6, performans ve sıkıştırma oranı arasında iyi bir dengedir. Ben genelde 6 kullanırım.
- gzip_types: Hangi MIME türündeki dosyaların sıkıştırılacağını belirtir. Yukarıda CSS, JS, HTML, XML, JSON ve SVG'yi ekledim.
- gzip_min_length 1024;: Sadece 1 kilobyte (1024 byte) ve üzerindeki dosyaları sıkıştırır. Çok küçük dosyaları sıkıştırmak gereksiz iş yükü getirebilir.
- gzip_disable "msie6";: Artık neredeyse kullanılmayan Internet Explorer 6 için Gzip'i devre dışı bırakır.
Ayarları Test Etme ve Nginx'i Yeniden Başlatma
Ayarları kaydettikten sonra, önce Nginx konfigürasyon dosyalarımızda bir sözdizimi hatası olmadığını kontrol etmeliyiz.
Eğer her şey yolundaysa ve "syntax is ok" mesajını görürseniz, Nginx servisini yeniden başlatabilirsiniz.
Dikkat Edilmesi Gerekenler
1. Gereksiz Dosya Türlerini Eklemeyin: JPEG, PNG, GIF, PDF, WOFF2 gibi zaten sıkıştırılmış formatları `gzip_types` listesine eklemeyin. Bu, CPU kullanımını boş yere artırır ve boyutta neredeyse hiç değişiklik olmaz.
2. Sıkıştırma Seviyesi (comp_level): 9 seviyesi en yüksek sıkıştırmayı sağlar ancak CPU'yu çok daha fazla yorar. 6 veya 7 seviyesi genellikle en idealidir.
3. Önbellekleme (Caching): Gzip ile birlikte doğru önbellekleme başlıklarını (Cache-Control) da ayarlamayı unutmayın. Sıkıştırılmış içeriğin önbelleğe alınması performansı katlar.
Sıkıştırmanın Çalıştığını Nasıl Doğrularım?
Tarayıcınızın Geliştirici Araçları'nı (F12) açın, "Network" sekmesine gidin ve sitenizi yenileyin. CSS veya JS dosyalarından birine tıklayın. "Response Headers" kısmında `Content-Encoding: gzip` ifadesini görüyorsanız, sıkıştırma başarıyla çalışıyor demektir.
Ayrıca terminalden curl komutu ile de test edebilirsiniz:
Yanıt başlıklarında `Content-Encoding: gzip` satırını arayın.
İşte bu kadar arkadaşlar! Bu basit ayar, özellikle mobil kullanıcılar ve düşük hızlı internet bağlantıları için sitenizin hızını müthiş etkileyecek. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir `gzip_types` listesi veya önerdiğiniz bir `gzip_comp_level` değeriniz var mı? Aklınıza takılan bir şey olursa aşağıya yazmaktan çekinmeyin, beraber çözelim.
Gzip, web sunucusu ile tarayıcı arasında gönderilen içeriği sıkıştırmak için kullanılan bir yöntemdir. Sunucu dosyayı sıkıştırır, tarayıcı ise aldığı bu sıkıştırılmış paketi açar ve gösterir. Bu sayede ağ üzerinden çok daha az veri transferi olur, sayfa yüklenme süreleri kısalır. CSS, JS, HTML, XML ve JSON gibi dosyalar bu sıkıştırmadan en yüksek verimi alır.
Nginx'te Gzip varsayılan olarak kapalı gelebilir. Ayarları yapılandırmak için ana Nginx konfigürasyon dosyasını veya ilgili site konfigürasyon dosyasını (örneğin /etc/nginx/sites-available/siteniz.com) düzenlememiz gerekiyor. Ben genelde tüm siteleri etkilemesi için ana konfigürasyon dosyasını tercih ederim.
Öncelikle, düzenleyeceğimiz dosyayı bir metin editörüyle (nano veya vim) açalım.
Bash:
sudo nano /etc/nginx/nginx.conf
Dosya içinde `http {` bloğunu bulun. Bu blok içine aşağıdaki Gzip ayarlarını ekleyelim. Eğer zaten bazı Gzip satırları varsa, onları aşağıdakilerle değiştirebilir veya düzenleyebilirsiniz.
NGINX:
http {
# Gzip Sıkıştırma Ayarları
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/xhtml+xml image/svg+xml;
gzip_min_length 1024;
gzip_disable "msie6";
}
Şimdi bu ayarların ne anlama geldiğine kısaca bakalım:
- gzip on;: Gzip sıkıştırmasını açar.
- gzip_vary on;: Tarayıcıya "Vary: Accept-Encoding" başlığını gönderir, bu da önbellekleme (cache) için önemlidir.
- gzip_proxied any;: Ters proxy'den gelen istekler de dahil olmak üzere her türlü yanıtı sıkıştırmaya çalışır.
- gzip_comp_level 6;: Sıkıştırma seviyesi (1-9 arası). 6, performans ve sıkıştırma oranı arasında iyi bir dengedir. Ben genelde 6 kullanırım.
- gzip_types: Hangi MIME türündeki dosyaların sıkıştırılacağını belirtir. Yukarıda CSS, JS, HTML, XML, JSON ve SVG'yi ekledim.
- gzip_min_length 1024;: Sadece 1 kilobyte (1024 byte) ve üzerindeki dosyaları sıkıştırır. Çok küçük dosyaları sıkıştırmak gereksiz iş yükü getirebilir.
- gzip_disable "msie6";: Artık neredeyse kullanılmayan Internet Explorer 6 için Gzip'i devre dışı bırakır.
Ayarları kaydettikten sonra, önce Nginx konfigürasyon dosyalarımızda bir sözdizimi hatası olmadığını kontrol etmeliyiz.
Bash:
sudo nginx -t
Eğer her şey yolundaysa ve "syntax is ok" mesajını görürseniz, Nginx servisini yeniden başlatabilirsiniz.
Bash:
sudo systemctl reload nginx # veya sudo service nginx reload
1. Gereksiz Dosya Türlerini Eklemeyin: JPEG, PNG, GIF, PDF, WOFF2 gibi zaten sıkıştırılmış formatları `gzip_types` listesine eklemeyin. Bu, CPU kullanımını boş yere artırır ve boyutta neredeyse hiç değişiklik olmaz.
2. Sıkıştırma Seviyesi (comp_level): 9 seviyesi en yüksek sıkıştırmayı sağlar ancak CPU'yu çok daha fazla yorar. 6 veya 7 seviyesi genellikle en idealidir.
3. Önbellekleme (Caching): Gzip ile birlikte doğru önbellekleme başlıklarını (Cache-Control) da ayarlamayı unutmayın. Sıkıştırılmış içeriğin önbelleğe alınması performansı katlar.
Tarayıcınızın Geliştirici Araçları'nı (F12) açın, "Network" sekmesine gidin ve sitenizi yenileyin. CSS veya JS dosyalarından birine tıklayın. "Response Headers" kısmında `Content-Encoding: gzip` ifadesini görüyorsanız, sıkıştırma başarıyla çalışıyor demektir.
Ayrıca terminalden curl komutu ile de test edebilirsiniz:
Bash:
curl -H "Accept-Encoding: gzip" -I http://siteniz.com/style.css
Yanıt başlıklarında `Content-Encoding: gzip` satırını arayın.
İşte bu kadar arkadaşlar! Bu basit ayar, özellikle mobil kullanıcılar ve düşük hızlı internet bağlantıları için sitenizin hızını müthiş etkileyecek. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir `gzip_types` listesi veya önerdiğiniz bir `gzip_comp_level` değeriniz var mı? Aklınıza takılan bir şey olursa aşağıya yazmaktan çekinmeyin, beraber çözelim.