Nginx’i Ubuntu 20.04 Üzerinde HTTP/2 Desteğiyle Kurulumu ve Yapılandırması
Giriş
Günümüzün dijital dünyasında web sitelerinin hızı ve performansı, kullanıcı deneyimi ve arama motoru sıralamaları açısından kritik bir rol oynamaktadır. İnternet kullanıcıları artık yavaş yüklenen sayfalara tahammül göstermemekte, bu da web geliştiricilerini ve sistem yöneticilerini sürekli olarak optimizasyon arayışına itmektedir. Bu bağlamda, HTTP/2 protokolü, web performansını önemli ölçüde artıran bir teknoloji olarak öne çıkmaktadır. Nginx ise yüksek performanslı, kararlı ve esnek bir web sunucusu olarak, HTTP/2’nin tüm avantajlarından faydalanmak için ideal bir platform sunar. Bu makalede, Ubuntu 20.04 işletim sistemi üzerinde Nginx’i HTTP/2 desteğiyle nasıl kuracağınızı ve yapılandıracağınızı adım adım detaylı bir şekilde inceleyeceğiz.
HTTP/2 Nedir ve Neden Önemlidir?
HTTP/2, HTTP protokolünün ikinci büyük sürümüdür ve 2015 yılında yayınlanmıştır. HTTP/1.1’in temel sınırlamalarını ele alarak, özellikle gecikmeyi azaltma ve sayfa yükleme sürelerini iyileştirme hedefleriyle tasarlanmıştır. Başlıca özellikleri şunlardır:
* Çoklama (Multiplexing): HTTP/1.1’de her istek için ayrı bir TCP bağlantısı kurulması gerekirken, HTTP/2 tek bir TCP bağlantısı üzerinden birden fazla eş zamanlı isteği ve yanıtı işleyebilir. Bu, bağlantı kurulum maliyetlerini azaltır ve ağ kaynaklarının daha verimli kullanılmasını sağlar.
* Akış Önceliklendirme (Stream Prioritization): Sunucunun hangi kaynakları önce göndermesi gerektiğini belirlemesine olanak tanır. Örneğin, kritik CSS veya JavaScript dosyaları resimlerden önce yüklenebilir, bu da sayfanın daha hızlı görselleşmesine yardımcı olur.
* Başlık Sıkıştırma (Header Compression – HPACK): HTTP istek ve yanıt başlıkları genellikle tekrarlayan bilgiler içerir. HTTP/2, bu başlıkları sıkıştırarak bant genişliği kullanımını azaltır.
* Sunucu İtme (Server Push): Sunucunun, istemcinin henüz talep etmediği ancak yakında ihtiyaç duyacağı kaynakları (örneğin, bir HTML dosyasında referans verilen CSS veya JS dosyaları) proaktif olarak göndermesine olanak tanır. Bu, istemcinin ek bir istek göndermesi için bekleme süresini ortadan kaldırır.
Bu özellikler sayesinde HTTP/2, özellikle yüksek gecikmeli veya bant genişliği sınırlı ağlarda web sitelerinin çok daha hızlı yüklenmesini sağlar. Ayrıca, HTTPS ile birlikte çalışmak üzere tasarlanmıştır ve çoğu tarayıcı HTTP/2’yi yalnızca güvenli (HTTPS) bağlantılar üzerinden destekler. Bu nedenle, HTTP/2 kullanmak için bir SSL/TLS sertifikasına sahip olmak zorunludur.
Nginx Neden Tercih Edilmelidir?
Nginx (Engine-X olarak okunur), Rus programcı Igor Sysoev tarafından geliştirilen açık kaynaklı, yüksek performanslı bir web sunucusu ve ters proxy sunucusudur. Apache gibi geleneksel sunuculara göre daha az bellek tüketimi ve daha yüksek eş zamanlı bağlantı işleme kapasitesi ile bilinir. Nginx’in başlıca avantajları şunlardır:
* Asenkron ve Olay Tabanlı Mimari: Nginx, her bağlantı için ayrı bir süreç veya iş parçacığı oluşturmak yerine, olay tabanlı ve asenkron bir mimari kullanır. Bu, aynı anda binlerce bağlantıyı düşük bellek ve CPU tüketimiyle işleyebilmesini sağlar.
* Yüksek Performans: Statik içerik sunma, yük dengeleme ve ters proxy görevlerinde olağanüstü performans sergiler.
* Esneklik: Gelişmiş yapılandırma seçenekleri sunar, bu da onu çok çeşitli web uygulamaları ve altyapılar için uygun hale getirir.
* Geniş Kullanım Alanı: Dünyanın en yoğun web sitelerinin önemli bir kısmı Nginx kullanmaktadır.
Ubuntu 20.04 Neden Tercih Edilmelidir?
Ubuntu 20.04 LTS (Long Term Support), Canonical tarafından desteklenen ve beş yıl boyunca güvenlik güncellemeleri ve bakım garantisi sunan popüler bir Linux dağıtımıdır. Sunucu ortamları için güvenilir, kararlı ve güncel bir platform sağlar. Geniş paket deposu ve aktif topluluk desteği sayesinde kurulum ve yapılandırma süreçleri oldukça kolaydır.
Bu makalenin sonunda, Ubuntu 20.04 üzerinde çalışan, HTTP/2 desteğiyle güvenli ve yüksek performanslı bir Nginx web sunucusuna sahip olacaksınız.
Ön Gereksinimler
Kuruluma başlamadan önce aşağıdaki ön gereksinimlerin karşılandığından emin olun:
* Ubuntu 20.04 Sunucu: SSH erişimi olan ve sudo yetkilerine sahip bir kullanıcı hesabı bulunan bir Ubuntu 20.04 sunucusu.
* Alan Adı (Domain Name): Web siteniz için kayıtlı bir alan adı (örneğin, ornek.com). Bu alan adının DNS ayarları, sunucunuzun genel IP adresini gösterecek şekilde yapılandırılmış olmalıdır.
* Temel Linux Bilgisi: Komut satırı kullanımı ve dosya düzenleme konularında temel bilgi.
* Güvenlik Duvarı: UFW (Uncomplicated Firewall) veya benzeri bir güvenlik duvarının etkin ve doğru yapılandırılmış olması önerilir.
Adım 1: Sistem Güncelleme
Herhangi bir yazılım kurulumuna başlamadan önce, sisteminizin güncel olduğundan emin olmak iyi bir uygulamadır. Bu, potansiyel güvenlik açıklarını kapatır ve en yeni paket sürümlerine erişmenizi sağlar.
SSH aracılığıyla sunucunuza bağlanın ve aşağıdaki komutları çalıştırın:
sudo apt update
sudo apt upgrade -y
apt update komutu, paket listelerini güncellerken, apt upgrade komutu yüklü paketleri en son sürümlerine yükseltir. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı vermenizi sağlar.
Adım 2: Nginx Kurulumu
Ubuntu’nun varsayılan depolarında Nginx mevcuttur. Kurulumu oldukça basittir.
sudo apt install nginx -y
Kurulum tamamlandıktan sonra, Nginx servisinin durumunu kontrol edebilirsiniz:
systemctl status nginx
Çıktıda active (running) ifadesini görmelisiniz. Eğer Nginx çalışmıyorsa, aşağıdaki komutla başlatabilirsiniz:
sudo systemctl start nginx
Nginx’in sistem başlangıcında otomatik olarak başlamasını sağlamak için:
sudo systemctl enable nginx
Güvenlik Duvarı Yapılandırması (UFW)
Eğer sunucunuzda UFW etkinse, Nginx’in gelen bağlantıları kabul edebilmesi için gerekli portları açmanız gerekir. UFW, Nginx için önceden tanımlanmış profil setleriyle birlikte gelir.
Nginx’in kullanılabilir UFW profillerini listelemek için:
sudo ufw app list
Aşağıdaki profilleri görmelisiniz:
* Nginx Full: HTTP (80) ve HTTPS (443) portlarını açar.
* Nginx HTTP: Yalnızca HTTP (80) portunu açar.
* Nginx HTTPS: Yalnızca HTTPS (443) portunu açar.
HTTP/2’yi HTTPS üzerinden kullanacağımız için Nginx Full profilini etkinleştirmeliyiz. Mevcut UFW kurallarınız varsa, önce HTTP portunu açan Nginx HTTP profilini etkinleştirebilir ve sertifika aldıktan sonra Nginx Full profiline geçiş yapabilirsiniz. Ancak baştan Nginx Full profilini etkinleştirmek daha pratik olacaktır.
sudo ufw allow 'Nginx Full'
sudo ufw status
sudo ufw status komutunun çıktısında Nginx Full profilinin ALLOW Anywhere olarak listelendiğini görmelisiniz.
Artık web tarayıcınızdan sunucunuzun IP adresine veya alan adına giderek Nginx’in varsayılan karşılama sayfasını görmelisiniz. Bu, Nginx’in başarıyla kurulduğunu ve çalıştığını gösterir.
Adım 3: Alan Adı ve DNS Yapılandırması
HTTP/2’yi kullanabilmek için bir alan adına ve bu alan adına ait bir SSL/TLS sertifikasına ihtiyacımız var. Alan adınızın, sunucunuzun genel IP adresine işaret ettiğinden emin olmalısınız.
Alan adı kayıt sağlayıcınızın (örneğin, GoDaddy, Namecheap, Google Domains) DNS yönetim panelinde, alan adınız için bir A kaydı oluşturmanız veya mevcut kaydı güncellemeniz gerekmektedir.
* Tip: A
* Ad/Host: @ (ana alan adı için) ve/veya www (www alt alan adı için)
* Değer/İşaretçi: Sunucunuzun genel IP adresi
DNS değişikliklerinin tüm dünyaya yayılması (propagation) biraz zaman alabilir (genellikle birkaç dakika ila birkaç saat). Bu süre zarfında, ping your_domain.com veya dig your_domain.com gibi komutlarla alan adınızın doğru IP adresine çözülüp çözülmediğini kontrol edebilirsiniz.
Adım 4: SSL/TLS Sertifikası Alma
HTTP/2’nin tarayıcılar tarafından desteklenmesi için HTTPS kullanılması zorunludur. Bu da bir SSL/TLS sertifikası edinmeyi gerektirir. Let’s Encrypt, ücretsiz, otomatik ve açık bir sertifika yetkilisidir ve Certbot aracı sayesinde sertifika alımını ve yenilemesini kolaylaştırır.
Certbot Kurulumu
Certbot’u Ubuntu 20.04’e kurmanın önerilen yolu snap paket yöneticisidir.
Öncelikle, snapd‘nin güncel olduğundan emin olun:
sudo snap install core
sudo snap refresh core
Ardından, Certbot’u kurun:
sudo snap install --classic certbot
Certbot komutunu sistem PATH’inize bağlayın:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Nginx ile Sertifika Alma
Certbot’un Nginx eklentisi, Nginx yapılandırmanızı otomatik olarak algılar ve SSL/TLS sertifikasını yükler.
Aşağıdaki komutu çalıştırın, your_domain.com ve www.your_domain.com kısımlarını kendi alan adınızla değiştirin:
sudo certbot --nginx -d ornek.com -d www.ornek.com
Bu komutu çalıştırdığınızda, Certbot sizden bazı bilgiler isteyecektir:
1. E-posta Adresi: Sertifika yenileme ve güvenlik bildirimleri için.
2. Hizmet Şartlarını Kabul Etme: A veya Y tuşuna basarak kabul edin.
3. EFF ile Paylaşım: İsteğe bağlıdır, Y veya N seçeneğini seçin.
4. Yönlendirme (Redirect): Certbot, HTTP trafiğini otomatik olarak HTTPS’ye yönlendirmek isteyip istemediğinizi soracaktır. 2: Redirect seçeneğini seçmek, tüm HTTP isteklerinin HTTPS’ye güvenli bir şekilde yönlendirilmesini sağlar ve SEO açısından da faydalıdır.
Başarılı bir kurulumun ardından, Certbot size sertifikanızın başarıyla alındığını ve otomatik yenilemenin ayarlandığını bildiren bir mesaj gösterecektir.
Sertifika Otomatik Yenileme Kontrolü
Let’s Encrypt sertifikaları 90 gün geçerlidir. Certbot, bu sertifikaları otomatik olarak yenileyecek bir cron işi veya systemd zamanlayıcısı kurar. Yenileme işleminin düzgün çalıştığını test etmek için aşağıdaki komutu kullanabilirsiniz:
sudo certbot renew --dry-run
Bu komut, sertifikaları yenilemeden bir deneme çalışması yapar. Herhangi bir hata görmüyorsanız, otomatik yenileme düzgün çalışıyor demektir.
Adım 5: Nginx’i HTTP/2 Desteğiyle Yapılandırma
Certbot, SSL/TLS sertifikasını yüklerken Nginx yapılandırmanızı otomatik olarak günceller. Ancak, HTTP/2 desteğini açıkça etkinleştirmek için küçük bir değişiklik yapmamız gerekebilir.
Nginx yapılandırma dosyaları genellikle /etc/nginx/sites-available/ dizininde bulunur. Certbot tarafından oluşturulan yapılandırma dosyanızın adı genellikle alan adınızla aynı olacaktır (örneğin, /etc/nginx/sites-available/ornek.com).
Yapılandırma dosyasını bir metin düzenleyici ile açın (örneğin, nano):
sudo nano /etc/nginx/sites-available/ornek.com
Dosya içinde, HTTPS için yapılandırılmış server bloğunu bulun. Bu blok genellikle listen 443 ssl; satırını içerir. HTTP/2’yi etkinleştirmek için bu satırı aşağıdaki gibi değiştirin:
listen 443 ssl http2;
Bu değişikliği yaptıktan sonra, yapılandırma dosyanız aşağıdaki gibi görünmelidir (bazı kısımlar Certbot tarafından otomatik olarak eklenmiş olacaktır):
server {
listen 443 ssl http2; # HTTP/2 desteğini etkinleştirir
listen [::]:443 ssl http2; # IPv6 için HTTP/2 desteğini etkinleştirir
server_name ornek.com www.ornek.com;
ssl_certificate /etc/letsencrypt/live/ornek.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ornek.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/ornek.com/chain.pem;
# SSL Ayarları (Certbot tarafından eklenmiş veya sizin tarafınızdan eklenmeli)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_stapling on; # OCSP Stapling etkinleştirildi
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s; # Google DNS sunucuları
resolver_timeout 5s;
# HSTS (HTTP Strict Transport Security) başlığı
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
root /var/www/ornek.com/html; # Web sitenizin kök dizini
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
# Certbot'un otomatik yenileme için kullandığı konum
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/ornek.com/html; # veya sizin web kök dizininiz
}
}
HTTP'den HTTPS'ye yönlendirme (Certbot tarafından otomatik eklenir)
server {
if ($host = www.ornek.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = ornek.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name ornek.com www.ornek.com;
return 404; # managed by Certbot
}
Önemli Notlar:
* root direktifini web sitenizin gerçek kök diziniyle değiştirdiğinizden emin olun (örneğin, /var/www/html veya /var/www/your_domain/html). Eğer henüz bir web sitesi kurmadıysanız, Nginx’in varsayılan kök dizini /var/www/html‘dir. Eğer farklı bir dizin kullanacaksanız, bu dizini oluşturmanız ve Nginx’in erişim haklarına sahip olduğundan emin olmanız gerekir.
* ssl_protocols, ssl_ciphers gibi SSL ayarları güvenlik ve performans açısından önemlidir. Yukarıdaki örnek, modern ve güvenli bir yapılandırma sunar.
* add_header Strict-Transport-Security direktifi HSTS’yi etkinleştirir. Bu, tarayıcıların sitenize her zaman HTTPS üzerinden bağlanmasını zorunlu kılar.
Değişiklikleri kaydettikten sonra (nano’da Ctrl+O, Enter, Ctrl+X), Nginx yapılandırmanızın sözdizimsel olarak doğru olup olmadığını kontrol edin:
sudo nginx -t
Eğer çıktı test is successful benzeri bir mesaj içeriyorsa, yapılandırma dosyanızda bir hata yok demektir. Şimdi Nginx’i yeniden yükleyerek değişiklikleri uygulayın:
sudo systemctl reload nginx
Bu, Nginx’i kesintiye uğratmadan yapılandırmayı yeniden yükler.
Adım 6: HTTP/2 Desteğini Doğrulama
Nginx’i HTTP/2 desteğiyle yapılandırdıktan sonra, her şeyin beklendiği gibi çalıştığından emin olmak için doğrulama yapmanız önemlidir.
Tarayıcı Geliştirici Araçları ile Doğrulama
Çoğu modern web tarayıcısı, geliştirici araçlarında HTTP/2 kullanımını gösterir.
1. Web sitenizi tarayıcınızda açın (örneğin, https://ornek.com).
2. Tarayıcınızın geliştirici araçlarını açın (genellikle F12 tuşu veya sağ tıklayıp “İncele” seçeneği).
3. “Network” (Ağ) sekmesine gidin.
4. Sayfayı yeniden yükleyin (Ctrl+R veya Cmd+R).
5. Kaynak listesinde “Protocol” (Protokol) sütununu arayın. Eğer bu sütun görünmüyorsa, sütun başlıklarına sağ tıklayıp “Protocol” seçeneğini etkinleştirin.
6. Listelenen kaynakların çoğunun protokol sütununda h2 (HTTP/2 için kısaltma) olarak göründüğünü doğrulamalısınız.
Online Araçlar ile Doğrulama
Çeşitli online araçlar, web sitenizin HTTP/2 desteğini ve SSL/TLS yapılandırmasını kontrol etmenize olanak tanır:
* KeyCDN HTTP/2 Test: https://tools.keycdn.com/http2-test
* GTmetrix veya WebPageTest: Bu araçlar, sayfa yükleme sürelerini ve kullanılan protokolleri detaylı olarak analiz eder.
* Qualys SSL Labs SSL Test: https://www.ssllabs.com/ssltest/ Bu araç, SSL/TLS sertifikanızın ve yapılandırmanızın kalitesini değerlendirir ve HTTP/2 desteğini de kontrol eder. Genellikle A+ notu almanız hedeflenir.
Komut Satırı ile Doğrulama
curl aracı ile de HTTP/2 desteğini doğrulayabilirsiniz. Ubuntu 20.04’te yüklü olan curl sürümü genellikle HTTP/2 desteğine sahiptir.
curl -I --http2 -s https://ornek.com
Çıktıda aşağıdaki gibi bir satır görmelisiniz:
HTTP/2 200
Bu, sunucunuzun HTTP/2 üzerinden yanıt verdiğini gösterir.
Ekstra Optimizasyonlar ve Güvenlik İpuçları
HTTP/2’yi etkinleştirmek önemli bir adımdır, ancak Nginx sunucunuzun performansını ve güvenliğini daha da artırmak için yapabileceğiniz başka optimizasyonlar da vardır.
HSTS (HTTP Strict Transport Security)
HSTS, web sunucularının tarayıcılara, sitelerine gelecekteki tüm erişimlerin yalnızca HTTPS üzerinden yapılması gerektiğini bildirmesini sağlayan bir güvenlik mekanizmasıdır. Bu, ortadaki adam (man-in-the-middle) saldırılarını önlemeye yardımcı olur ve kullanıcıların sitenize yanlışlıkla HTTP üzerinden erişmesini engeller.
Nginx yapılandırmanızda zaten eklemiş olmalısınız, ancak tekrar kontrol edin:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
* max-age=31536000: Tarayıcının bu kuralı 1 yıl (31,536,000 saniye) boyunca hatırlamasını sağlar.
* includeSubDomains: Tüm alt alan adları için de HSTS’yi etkinleştirir.
* preload: Alan adınızı HSTS preload listesine eklemek için uygun hale getirir. Bu, tarayıcıların sitenize ilk ziyaretinden önce bile HTTPS kullanmasını sağlar. https://hstspreload.org/ adresinden alan adınızı bu listeye ekleyebilirsiniz.
OCSP Stapling
OCSP (Online Certificate Status Protocol) Stapling, sunucunuzun SSL/TLS sertifikasının geçerliliğini doğrulayan bir mekanizmadır. Normalde, bir tarayıcı bir sertifikayı doğruladığında, sertifika yetkilisinin OCSP sunucusuna bir istek gönderir. OCSP Stapling ile sunucu, bu doğrulamayı kendisi yapar ve yanıtı (zımbalanmış yanıtı) elinde tutarak tarayıcıya sertifika ile birlikte gönderir. Bu, tarayıcının ek bir istek yapma ihtiyacını ortadan kaldırarak sayfa yükleme süresini hızlandırır ve gizliliği artırır.
Nginx yapılandırmanızda aşağıdaki satırları ekleyerek etkinleştirebilirsiniz (eğer Certbot otomatik eklemediyse):
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s; # Güvenilir DNS sunucuları
resolver_timeout 5s;
resolver direktifi, Nginx’in OCSP sunucularını çözmek için kullanacağı DNS sunucularını belirtir. Google’ın genel DNS sunucuları (8.8.8.8 ve 8.8.4.4) iyi bir seçimdir.
TLS 1.3 Desteği
TLS 1.3, TLS protokolünün en son sürümüdür ve önceki sürümlere göre daha hızlı ve daha güvenlidir. Modern Nginx sürümleri (genellikle 1.13.0 ve sonrası) ve OpenSSL 1.1.1 veya daha yenisi ile TLS 1.3 desteği mevcuttur. Ubuntu 20.04 varsayılan olarak bu sürümleri içerir.
Nginx yapılandırmanızda ssl_protocols direktifinde TLS 1.3’ü etkinleştirdiğinizden emin olun:
ssl_protocols TLSv1.2 TLSv1.3;
Bu, hem TLS 1.2 hem de TLS 1.3’ün kullanılmasını sağlar.
GZIP veya Brotli Sıkıştırma
Web içeriğini sıkıştırmak, ağ üzerinden aktarılan veri miktarını azaltarak sayfa yükleme sürelerini önemli ölçüde hızlandırır. Nginx hem GZIP hem de Brotli sıkıştırmasını destekler. Brotli, genellikle GZIP’ten daha iyi sıkıştırma oranları sunar.
GZIP Sıkıştırma (Varsayılan olarak Nginx’te mevcuttur):
Nginx’in ana yapılandırma dosyası olan /etc/nginx/nginx.conf içinde veya site yapılandırma dosyanızda aşağıdaki ayarları ekleyerek GZIP’i etkinleştirebilirsiniz:
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
Brotli Sıkıştırma (Daha iyi performans için):
Brotli, Nginx’in varsayılan modüllerinden biri değildir ve genellikle Nginx’i kaynak koddan derlemeniz veya Nginx’in daha yeni sürümlerini (örneğin, Nginx Plus veya Nginx’in resmi PPA’sı) kullanmanız gerekebilir. Ubuntu 20.04’teki varsayılan Nginx paketi genellikle Brotli modülüyle birlikte gelmez. Eğer Brotli kullanmak istiyorsanız, Nginx’i Brotli modülü ile derlemeniz veya üçüncü taraf bir depodan Nginx’i yüklemeniz gerekir. Bu daha gelişmiş bir konudur ve bu makalenin kapsamı dışındadır. Ancak, eğer Brotli’yi kurabilirseniz, yapılandırması şu şekildedir:
brotli on;
brotli_comp_level 6;
brotli_buffers 16 8k;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml application/x-font-ttf font/opentype;
Tarayıcı Önbellekleme
Statik dosyalar (resimler, CSS, JavaScript) için tarayıcı önbelleklemesini etkinleştirmek, tekrar ziyaret eden kullanıcılar için yükleme sürelerini azaltır. Nginx yapılandırmanıza aşağıdaki gibi bir location bloğu ekleyebilirsiniz:
location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|eot|ico|css|js)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
access_log off;
}
Bu, belirli dosya türleri için tarayıcının dosyaları bir yıl boyunca önbelleğe almasını söyler.
Güvenlik Başlıkları
Ek güvenlik başlıkları eklemek, çeşitli web tabanlı saldırılara karşı koruma sağlar.
add_header X-Frame-Options "SAMEORIGIN" always; # Clickjacking saldırılarını önler
add_header X-Content-Type-Options "nosniff" always; # MIME türü koklamayı engeller
add_header X-XSS-Protection "1; mode=block" always; # XSS saldırılarına karşı korur
add_header Referrer-Policy "no-referrer-when-downgrade" always; # Yönlendiren bilgisini kontrol eder
Bu başlıkları Nginx server bloğunuza ekleyebilirsiniz.
Nginx Günlükleri
Nginx, erişim (access) ve hata (error) günlüklerini tutar. Bu günlükler, sunucunuzun ve web uygulamanızın performansını izlemek ve sorunları gidermek için çok önemlidir. Varsayılan olarak /var/log/nginx/ dizininde bulunurlar.
Erişim günlüklerini kapatarak (örneğin, statik dosyalar için) disk G/Ç’yi azaltabilirsiniz, ancak hata günlüklerini her zaman açık tutmak önemlidir.
Sorun Giderme
Kurulum veya yapılandırma sırasında sorunlarla karşılaşabilirsiniz. İşte yaygın sorunlar ve çözümleri:
* Nginx başlatılamıyor veya yeniden yüklenemiyor:
* sudo nginx -t komutunu çalıştırarak yapılandırma dosyasındaki sözdizimi hatalarını kontrol edin.
* sudo journalctl -xe komutunu kullanarak sistem günlüklerini kontrol edin. Nginx ile ilgili hata mesajlarını arayın.
* Port 80 veya 443’ün başka bir servis tarafından kullanılıp kullanılmadığını kontrol edin: sudo netstat -tulpn | grep :80 veya sudo netstat -tulpn | grep :443.
* Sertifika hataları veya HTTPS çalışmıyor:
* Certbot komutunu doğru alan adları ile çalıştırdığınızdan emin olun.
* Nginx yapılandırma dosyasındaki ssl_certificate ve ssl_certificate_key yollarının doğru olduğundan emin olun.
* UFW güvenlik duvarının 443 portuna izin verdiğinden emin olun: sudo ufw status.
* HTTP/2 etkin görünmüyorsa:
* Nginx yapılandırma dosyasında listen 443 ssl http2; direktifinin doğru yazıldığından emin olun.
* Nginx’i yeniden yüklediğinizden emin olun: sudo systemctl reload nginx.
* Nginx sürümünüzün HTTP/2 desteğine sahip olduğundan emin olun (Ubuntu 20.04’teki varsayılan Nginx sürümü genellikle destekler).
* Web sitesi erişilemiyor:
* Alan adınızın DNS ayarlarının sunucunuzun doğru IP adresine işaret ettiğinden emin olun.
* Sunucunuzun genel IP adresine ping atarak sunucuya erişilebildiğinden emin olun.
* Güvenlik duvarınızın (UFW veya bulut sağlayıcınızın güvenlik grubu) 80 ve 443 portlarına izin verdiğinden emin olun.
Sonuç
Bu makalede, Ubuntu 20.04 üzerinde Nginx’i HTTP/2 desteğiyle kurmak ve yapılandırmak için gerekli tüm adımları detaylı bir şekilde inceledik. Sistem güncellemesinden Nginx kurulumuna, SSL/TLS sertifikası alımından HTTP/2 etkinleştirmeye ve ek optimizasyonlara kadar her aşamayı kapsadık.
HTTP/2’nin çoklama, başlık sıkıştırma ve sunucu itme gibi gelişmiş özellikleri sayesinde, web siteleriniz artık çok daha hızlı yüklenecek ve kullanıcılarınıza daha iyi bir deneyim sunacaktır. Nginx’in yüksek performanslı ve kararlı yapısıyla birleştiğinde, bu yapılandırma modern web uygulamaları için sağlam bir temel oluşturur.
Unutmayın ki web performans ve güvenlik konuları sürekli gelişmektedir. Sunucunuzu ve yazılımlarınızı düzenli olarak güncel tutmak, sertifikalarınızı zamanında yenilemek ve yeni optimizasyon tekniklerini araştırmaya devam etmek, web sitenizin en iyi performansı göstermesini sağlayacaktır. Bu rehber, size bu yolculukta güçlü bir başlangıç noktası sunmuştur. Artık web siteleriniz, modern web’in gerektirdiği hız ve güvenlik standartlarını karşılamaya hazır.
