Nginx’i Ubuntu 18.04 Üzerinde HTTP/2 Desteği ile Kurulumu
Giriş
Günümüzün hızla gelişen dijital dünyasında, web sitelerinin performansı ve güvenliği, kullanıcı deneyimi ve arama motoru sıralamaları için kritik öneme sahiptir. Nginx, yüksek performanslı, açık kaynaklı bir web sunucusu ve ters proxy olarak, bu gereksinimleri karşılamada öncü bir rol oynamaktadır. HTTP/2 ise, web’in temel iletişim protokolü olan HTTP’nin ikinci büyük sürümü olup, web performansını önemli ölçüde artırmak için tasarlanmıştır. Bu makalede, Nginx’i Ubuntu 18.04 işletim sistemi üzerinde HTTP/2 desteği ile nasıl kuracağınızı ve yapılandıracağınızı adım adım detaylı bir şekilde inceleyeceğiz.
Nginx, eşzamanlı bağlantıları düşük bellek tüketimiyle işleyebilme yeteneği sayesinde, özellikle yüksek trafikli web siteleri için popüler bir seçimdir. Modüler yapısı ve esnek yapılandırma seçenekleri, onu çeşitli kullanım senaryolarına uygun hale getirir. Ubuntu 18.04 (Bionic Beaver) ise, uzun süreli destek (LTS) sunan, stabil ve yaygın olarak kullanılan bir Linux dağıtımıdır. Bu kombinasyon, güvenilir ve yüksek performanslı bir web sunucusu ortamı oluşturmak için ideal bir temel sağlar.
HTTP/2, HTTP/1.1’in bazı temel sınırlamalarını aşarak web’in daha hızlı ve verimli çalışmasını sağlar. En önemli özelliklerinden bazıları şunlardır:
* Multiplexing (Çoklama): Tek bir TCP bağlantısı üzerinden birden fazla eşzamanlı istek ve yanıt gönderme yeteneği. Bu, “head-of-line blocking” sorununu ortadan kaldırır ve kaynakların paralel olarak yüklenmesini sağlar. HTTP/1.1’de her kaynak için ayrı bir bağlantı açılması gerektiğinden, bu durum ciddi gecikmelere yol açabiliyordu.
* Header Compression (Başlık Sıkıştırma): HTTP istek ve yanıt başlıkları, HPACK sıkıştırma algoritması kullanılarak sıkıştırılır. Bu, özellikle çok sayıda küçük istekte bant genişliği kullanımını azaltır.
* Server Push (Sunucu İtme): Sunucu, istemcinin henüz istemediği, ancak yakında isteyeceğini tahmin ettiği kaynakları (CSS, JavaScript dosyaları gibi) proaktif olarak gönderebilir. Bu, istemcinin ek bir istek göndermesini beklemeksizin kaynakların önceden yüklenmesini sağlar ve sayfa yükleme sürelerini kısaltır.
* Stream Prioritization (Akış Önceliklendirme): İstemci, kaynakların hangi sırayla yükleneceğine dair sunucuya ipuçları verebilir. Bu, kritik kaynakların daha hızlı yüklenmesini sağlayarak kullanıcı deneyimini iyileştirir.
HTTP/2’nin bu avantajlarından tam olarak yararlanabilmek için, modern tarayıcılar genellikle SSL/TLS şifrelemesi gerektirir. Bu nedenle, Nginx’i HTTP/2 ile yapılandırırken bir SSL/TLS sertifikası kullanmak zorunludur. Bu makalede, Let’s Encrypt ile ücretsiz bir SSL/TLS sertifikası almayı da ele alacağız.
Bu makalenin sonunda, Ubuntu 18.04 sunucunuzda Nginx’i HTTP/2 ve SSL/TLS ile güvenli ve performanslı bir şekilde çalışır duruma getirmiş olacaksınız.
Ön Gereksinimler
Bu kurulum sürecine başlamadan önce, aşağıdaki ön gereksinimlere sahip olduğunuzdan emin olun:
* Ubuntu 18.04 Sunucusu: Root erişimi veya sudo yetkilerine sahip bir kullanıcı ile yapılandırılmış bir Ubuntu 18.04 sunucusu. Makineye SSH ile erişebiliyor olmanız gerekmektedir.
* Alan Adı (Domain Name): Sunucunuza yönlendirilmiş geçerli bir alan adı (örn. example.com). Bu, SSL/TLS sertifikası almak ve web sitenize erişmek için gereklidir. Alan adınızın DNS kayıtlarının (A kaydı veya CNAME kaydı) sunucunuzun IP adresine doğru şekilde işaret ettiğinden emin olun.
* SSL/TLS Sertifikası: HTTP/2’nin modern tarayıcılar tarafından desteklenmesi için SSL/TLS şifrelemesi zorunludur. Bu makalede, ücretsiz ve otomatikleştirilmiş bir seçenek olan Let’s Encrypt sertifikalarını kullanacağız.
* Temel Linux Komut Bilgisi: Terminalde temel komutları (örn. cd, ls, nano, apt) kullanma konusunda rahat olmanız beklenmektedir.
Bu gereksinimler sağlandığında, kuruluma başlayabiliriz.
Adım 1: Sistemi Güncelleme
Herhangi bir yazılım kurulumuna başlamadan önce, sistem paket listelerinizi güncellemek ve mevcut paketlerinizi en son sürümlerine yükseltmek iyi bir uygulamadır. Bu, olası bağımlılık sorunlarını önler ve sisteminizin güvenliğini sağlar.
Terminalinizi açın ve aşağıdaki komutları çalıştırın:
sudo apt update
sudo apt upgrade -y
* sudo apt update: Bu komut, yerel paket indeksinizi, depolardan gelen en son paket bilgileriyle günceller. Hangi paketlerin yükseltilebileceğini ve yeni hangi paketlerin mevcut olduğunu öğrenir.
* sudo apt upgrade -y: Bu komut, update komutuyla güncellenen paket indeksine göre yüklü tüm paketleri en son sürümlerine yükseltir. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı vermenizi sağlar, bu da etkileşimsiz bir yükseltme süreci sağlar.
Bu işlem biraz zaman alabilir. Tamamlandığında, bir sonraki adıma geçebiliriz.
Adım 2: Nginx Kurulumu
Sisteminiz güncel olduğuna göre, Nginx web sunucusunu kurabiliriz. Ubuntu’nun varsayılan depolarında Nginx’in güncel bir sürümü bulunur ve bu sürüm genellikle HTTP/2 desteğiyle derlenmiş olarak gelir.
Nginx’i kurmak için aşağıdaki komutu kullanın:
sudo apt install nginx -y
Kurulum tamamlandıktan sonra, Nginx servisinin durumunu kontrol edebilirsiniz:
systemctl status nginx
Çıktıda active (running) ibaresini görmeniz gerekmektedir. Eğer çalışmıyorsa, aşağıdaki komutla başlatabilirsiniz:
sudo systemctl start nginx
Ayrıca, Nginx’in sistem başlangıcında otomatik olarak başlamasını sağlamak için etkinleştirmeniz iyi bir fikirdir:
sudo systemctl enable nginx
Güvenlik Duvarı Ayarları (UFW):
Eğer Ubuntu sunucunuzda UFW (Uncomplicated Firewall) etkinse, Nginx’in gelen bağlantıları kabul edebilmesi için güvenlik duvarı kurallarını ayarlamanız gerekir. Nginx, UFW ile entegre profillerle gelir:
* 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 hem de 443 numaralı bağlantı noktalarını açar.
HTTP/2’yi SSL ile kullanacağımız için, hem HTTP hem de HTTPS trafiğine izin vermemiz gerekecek. HTTP trafiğine izin vermek, sitenize HTTP üzerinden gelen ziyaretçileri otomatik olarak HTTPS’ye yönlendirmemizi sağlayacaktır.
Önce mevcut UFW uygulama profillerini listeleyin:
sudo ufw app list
Ardından, Nginx Full profiline izin verin:
sudo ufw allow 'Nginx Full'
Eğer UFW etkin değilse, etkinleştirmeniz gerekecektir. Etkinleştirmeden önce SSH bağlantısının kesilmemesi için SSH portuna (varsayılan olarak 22) izin verdiğinizden emin olun:
sudo ufw allow OpenSSH
sudo ufw enable
y tuşuna basarak onaylayın. Son olarak, UFW’nin durumunu kontrol ederek kuralların doğru bir şekilde uygulandığından emin olun:
sudo ufw status
Artık bir web tarayıcısı açıp sunucunuzun IP adresini (veya alan adınızı, eğer DNS kayıtları güncellenmişse) yazarak varsayılan Nginx karşılama sayfasını görebilirsiniz. Bu, Nginx’in başarıyla kurulduğunu ve çalıştığını gösterir.
Adım 3: SSL/TLS Sertifikası Alma
HTTP/2’nin modern tarayıcılarda çalışması için SSL/TLS şifrelemesi zorunludur. Bu adımda, ücretsiz ve otomatik bir SSL/TLS sertifikası sağlayan Let’s Encrypt’i Certbot aracı ile kullanacağız.
Certbot Kurulumu:
Certbot, Let’s Encrypt sertifikalarını almak ve yönetmek için kullanılan bir araçtır. Nginx ile entegrasyonu sağlayan bir eklentisi de mevcuttur.
sudo apt install certbot python-certbot-nginx -y
Sertifika Alma:
Certbot’u Nginx eklentisiyle kullanarak alan adınız için bir SSL/TLS sertifikası alabilirsiniz. Aşağıdaki komutu your_domain.com ve www.your_domain.com yerine kendi alan adınızla değiştirerek çalıştırın:
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
Bu komutu çalıştırdığınızda, Certbot sizden birkaç bilgi isteyecektir:
1. E-posta Adresi: Sertifika bildirimleri ve acil durumlar için bir e-posta adresi girin.
2. Hizmet Şartları: Let’s Encrypt hizmet şartlarını kabul etmeniz istenecektir. A tuşuna basarak kabul edin.
3. EFF Vakfı ile Paylaşım: E-posta adresinizi EFF (Electronic Frontier Foundation) ile paylaşıp paylaşmak istemediğiniz sorulacaktır. Y veya N tuşuna basarak seçiminizi yapın.
4. HTTP’den HTTPS’ye Yönlendirme: Certbot, Nginx yapılandırmanızı otomatik olarak HTTP’den HTTPS’ye yönlendirme yapacak şekilde güncelleyip güncellemeyeceğini soracaktır. 2 seçeneğini (Redirect) seçerek tüm HTTP trafiğini HTTPS’ye yönlendirmenizi şiddetle tavsiye ederiz. Bu, güvenlik için kritik öneme sahiptir.
Tüm adımları tamamladığınızda, Certbot sertifikayı başarıyla alacak ve Nginx yapılandırmanızı güncelleyecektir. Başarılı bir kurulumda şöyle bir mesaj görmelisiniz:
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain.com/privkey.pem
...
Otomatik Yenileme Testi:
Let’s Encrypt sertifikaları 90 gün geçerlidir. Certbot, sertifikaları otomatik olarak yenilemek için bir cron job veya systemd timer kurar. Bu otomatik yenileme sürecinin çalıştığından emin olmak için bir kuru çalıştırma (dry-run) yapabilirsiniz:
sudo certbot renew --dry-run
Eğer herhangi bir hata mesajı almazsanız, otomatik yenilemenin düzgün çalıştığı anlamına gelir.
Adım 4: Nginx Yapılandırmasını HTTP/2 Desteği için Düzenleme
Certbot, SSL/TLS’yi etkinleştirmek için Nginx yapılandırmanızı zaten değiştirmiş olmalı, ancak HTTP/2 desteğini açıkça belirtmek için bazı ek düzenlemeler yapmamız gerekebilir.
Nginx sitelerin yapılandırma dosyaları genellikle /etc/nginx/sites-available/ dizininde bulunur. Certbot, genellikle varsayılan yapılandırma dosyasını (/etc/nginx/sites-available/default) veya alan adınızla aynı adı taşıyan yeni bir dosyayı (/etc/nginx/sites-available/your_domain.com) günceller.
Yapılandırma dosyanızı düzenlemek için bir metin düzenleyici kullanın. Örneğin:
sudo nano /etc/nginx/sites-available/default
veya
sudo nano /etc/nginx/sites-available/your_domain.com
Açılan dosyada, listen 443 ssl; satırını bulmanız gerekmektedir. Bu satırı aşağıdaki gibi http2 anahtar kelimesini ekleyerek değiştirin:
listen 443 ssl http2;
Bu, Nginx’e 443 numaralı bağlantı noktasında SSL/TLS ve HTTP/2 protokollerini kullanmasını söyler.
Ayrıca, server bloğunuzda aşağıdaki SSL/TLS ayarlarının bulunduğundan ve doğru yolları gösterdiğinden emin olun. Certbot genellikle bunları otomatik olarak ekler, ancak kontrol etmek önemlidir:
server {
listen 443 ssl http2; # HTTP/2 desteği burada!
listen [::]:443 ssl http2; # IPv6 için de HTTP/2 desteği
server_name your_domain.com www.your_domain.com;
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem; # Sertifika yolu
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem; # Özel anahtar yolu
ssl_protocols TLSv1.2 TLSv1.3; # Yalnızca güvenli TLS sürümlerini kullanın
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256'; # Güvenli şifre paketleri
ssl_prefer_server_ciphers on; # Sunucunun şifre seçimine öncelik ver
# HTTP Strict Transport Security (HSTS) - Tarayıcıların her zaman HTTPS kullanmasını sağlar
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
# OCSP Stapling (Performans ve Gizlilik)
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/your_domain.com/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s; # DNS çözümleyici
resolver_timeout 5s;
root /var/www/html; # Web sitenizin kök dizini
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
# Diğer yapılandırmalarınız buraya gelebilir
}
Yukarıdaki örnekte önemli noktalar:
* listen 443 ssl http2;: Bu, HTTP/2’yi etkinleştiren ana yönergedir.
* ssl_protocols TLSv1.2 TLSv1.3;: Yalnızca modern ve güvenli TLS protokollerini kullanmak önemlidir. Ubuntu 18.04’teki OpenSSL sürümü genellikle TLSv1.3’ü destekler.
* ssl_ciphers: Güvenli şifre paketleri listesi. Bu liste sürekli güncellenebilir, en güncel ve güvenli listeyi Mozilla SSL Configuration Generator gibi kaynaklardan alabilirsiniz.
* add_header Strict-Transport-Security ...: HTTP Strict Transport Security (HSTS) başlığı, tarayıcılara belirli bir süre boyunca (burada 2 yıl) sitenize yalnızca HTTPS üzerinden erişmeleri gerektiğini bildirir. Bu, man-in-the-middle saldırılarını önlemeye yardımcı olur ve sitenizin her zaman güvenli bir şekilde yüklenmesini sağlar. preload seçeneği, alan adınızın HSTS ön yükleme listesine eklenmesini sağlar, böylece tarayıcılar sitenizi daha hiç ziyaret etmeden bile HTTPS ile yükler.
* ssl_stapling on;: OCSP Stapling, sertifika iptal durumunu doğrulamak için yapılan sorguları hızlandırır ve gizliliği artırır.
* resolver: OCSP sorguları için kullanılacak DNS sunucularını belirtir. Google’ın genel DNS sunucuları (8.8.8.8 ve 8.8.4.4) yaygın olarak kullanılır.
HTTP’den HTTPS’ye Yönlendirme:
Certbot genellikle bu kısmı otomatik olarak yapılandırır. Eğer server bloğunuzda 80 numaralı bağlantı noktasını dinleyen ve HTTPS’ye yönlendiren bir yapılandırma yoksa, aşağıdaki gibi bir blok eklemeniz gerekecektir:
server {
listen 80;
listen [::]:80;
server_name your_domain.com www.your_domain.com;
return 301 https://$host$request_uri; # Tüm HTTP trafiğini HTTPS'ye yönlendir
}
Bu blok, 80 numaralı bağlantı noktasına gelen tüm istekleri kalıcı olarak (301 durum kodu ile) HTTPS sürümüne yönlendirecektir.
Değişiklikleri kaydedin ve dosyadan çıkın (nano’da Ctrl+O, Enter, Ctrl+X).
Adım 5: Nginx Yapılandırmasını Test Etme ve Yeniden Başlatma
Yapılandırma dosyasında yaptığınız değişikliklerin sözdizimi açısından doğru olduğundan emin olmak için Nginx’in kendi test aracını kullanın:
sudo nginx -t
Eğer her şey yolundaysa, aşağıdaki gibi bir çıktı görmelisiniz:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Herhangi bir hata mesajı alırsanız, yapılandırma dosyanızı tekrar kontrol edin ve hataları düzeltin. Genellikle, hatalar satır numarasıyla birlikte belirtilir, bu da sorunu bulmanıza yardımcı olur.
Yapılandırma testi başarılı olduktan sonra, Nginx servisini yeniden başlatarak veya yeniden yükleyerek değişiklikleri uygulayın:
sudo systemctl reload nginx
reload komutu, çalışan servisi kesintiye uğratmadan yapılandırma değişikliklerini uygular. Eğer bir sorun yaşanırsa, restart komutunu kullanabilirsiniz, ancak bu kısa bir kesintiye neden olabilir:
sudo systemctl restart nginx
Adım 6: HTTP/2 Desteğini Doğrulama
Nginx’i HTTP/2 ile başarıyla yapılandırdığınızdan emin olmak için birkaç farklı yöntemle doğrulama yapabilirsiniz.
1. Tarayıcı Geliştirici Araçları:
Modern web tarayıcıları, bir web sitesinin hangi protokolü kullandığını görüntülemenizi sağlayan geliştirici araçlarına sahiptir.
* Web sitenizi bir tarayıcıda (Chrome, Firefox, Edge vb.) açın.
* F12 tuşuna basarak veya sağ tıklayıp “İncele” seçeneğini seçerek geliştirici araçlarını açın.
* “Network” (Ağ) sekmesine gidin.
* Sayfayı yenileyin.
* Kaynaklar listesinde, “Protocol” (Protokol) sütununu arayın. Eğer bu sütun görünmüyorsa, başlık çubuğuna sağ tıklayıp “Protocol” seçeneğini etkinleştirin.
* Web sitenizin ana belgesi (genellikle ilk istek) için protokol sütununda h2 veya HTTP/2 görmelisiniz. Bu, HTTP/2’nin başarıyla çalıştığını gösterir.
2. Online Araçlar:
Birçok online araç, web sitenizin HTTP/2 desteğini kontrol etmenizi sağlar.
* KeyCDN HTTP/2 Test: https://tools.keycdn.com/http2-test adresine gidin ve alan adınızı girin. Sitenizin HTTP/2’yi destekleyip desteklemediğini size bildirecektir.
* GTmetrix veya Google PageSpeed Insights: Bu araçlar, sitenizin genel performansını analiz ederken HTTP/2 kullanımını da rapor edebilir.
3. cURL Komutu:
Terminal üzerinden curl komutunu kullanarak da HTTP/2 desteğini kontrol edebilirsiniz. Ubuntu 18.04’te yüklü olan curl sürümü genellikle HTTP/2 desteğiyle gelir.
curl -I --http2 -s https://your_domain.com
Bu komutun çıktısında, HTTP/2 protokolünün kullanıldığını gösteren bir satır arayın. Örneğin:
HTTP/2 200
veya sadece HTTP/2 ifadesini aramak için:
curl -I --http2 -s https://your_domain.com | grep "HTTP/2"
Eğer bu komut HTTP/2 çıktısını veriyorsa, Nginx’iniz HTTP/2 üzerinden iletişim kuruyor demektir.
Tüm bu doğrulama adımları, Nginx’inizin Ubuntu 18.04 üzerinde HTTP/2 desteğiyle doğru bir şekilde yapılandırıldığından emin olmanızı sağlayacaktır.
Ek Optimizasyonlar ve Güvenlik İpuçları
Nginx’i HTTP/2 ile kurduktan sonra, web sitenizin performansını ve güvenliğini daha da artırmak için bazı ek optimizasyonlar ve güvenlik ipuçları uygulayabilirsiniz.
1. Gzip Sıkıştırma:
Nginx, web içeriğini istemciye göndermeden önce sıkıştırarak bant genişliği kullanımını azaltabilir ve sayfa yükleme sürelerini hızlandırabilir. Bu, özellikle metin tabanlı kaynaklar (HTML, CSS, JavaScript) için etkilidir.
Nginx yapılandırma dosyanızda (genellikle /etc/nginx/nginx.conf veya site yapılandırma dosyanızda) aşağıdaki yönergeleri ekleyin:
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;
Bu ayarlar, belirtilen dosya türlerini sıkıştıracak ve çoğu tarayıcı tarafından desteklenen Gzip sıkıştırmasını etkinleştirecektir.
2. Önbellekleme (Caching):
Statik dosyalar (resimler, CSS, JavaScript) için tarayıcı önbelleklemesini etkinleştirmek, tekrar eden ziyaretlerde sayfa yükleme sürelerini önemli ölçüde azaltır.
Nginx yapılandırmanızda, statik dosyaların bulunduğu location bloklarına expires yönergesini ekleyebilirsiniz:
location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|ico|css|js)$ {
expires 365d; # Bu dosyaları 365 gün boyunca önbelleğe al
add_header Cache-Control "public, no-transform";
access_log off; # Bu tür dosyalar için erişim günlüklerini kapatarak disk I/O'yu azaltın
}
Bu, tarayıcılara bu dosyaları belirtilen süre boyunca yerel olarak depolamalarını söyleyecektir.
3. Günlükleme (Logging):
Nginx, erişim ve hata günlüklerini tutar. Bu günlükler, sorun giderme ve güvenlik analizi için çok değerlidir. Varsayılan olarak etkindirler, ancak günlük formatlarını özelleştirebilir veya belirli location blokları için kapatabilirsiniz (yukarıdaki örnekte olduğu gibi statik dosyalar için).
nginx.conf dosyasında http bloğu içinde log_format yönergesini bulabilirsiniz.
4. Güvenlik Duvarı (UFW):
Adım 2’de UFW’yi yapılandırmış olsanız da, sunucunuzun güvenliğini sağlamak için sadece gerekli bağlantı noktalarını açık tutmaya devam edin. SSH (22), HTTP (80) ve HTTPS (443) genellikle yeterlidir. Diğer tüm bağlantı noktalarını kapalı tutmak, saldırı yüzeyini azaltır.
5. Modern TLS Ayarları:
Adım 4’teki yapılandırmada güvenli TLS protokolleri ve şifre paketleri kullanmıştık. Bu ayarları düzenli olarak gözden geçirmek ve güncel güvenlik standartlarına uygun tutmak önemlidir. Mozilla SSL Configuration Generator gibi araçlar, güncel önerileri almanıza yardımcı olabilir.
6. HTTP/2 Server Push (İstemci İtme):
HTTP/2’nin önemli özelliklerinden biri olan Server Push, sunucunun istemcinin henüz istemediği kaynakları proaktif olarak göndermesine olanak tanır. Nginx’in doğrudan HTTP/2 Server Push desteği, Nginx 1.13.9 sürümünden itibaren mevcuttur. Eğer Nginx sürümünüz bu veya daha yeniyse, yapılandırmanıza http2_push yönergesini ekleyebilirsiniz. Ubuntu 18.04’teki Nginx sürümü genellikle daha eski olduğu için bu özellik varsayılan olarak desteklenmeyebilir.
Eğer Nginx sürümünüz destekliyorsa:
# Nginx 1.13.9 ve sonrası için
http2_push /static/css/style.css;
http2_push /static/js/main.js;
Eğer Nginx sürümünüz bu özelliği doğrudan desteklemiyorsa, bunu uygulama katmanında (örn. PHP veya Node.js uygulamalarında) veya web sitenizde Link HTTP başlıklarını kullanarak simüle edebilirsiniz. Örneğin:
add_header Link "; rel=preload; as=style, ; rel=preload; as=script";
Bu, tarayıcıya bu kaynakları erken aşamada yüklemesini bildirir ve Server Push’a benzer bir etki yaratır.
7. Güvenlik Başlıkları:
HSTS dışında, tarayıcılara sitenizle nasıl etkileşim kuracakları konusunda ek güvenlik talimatları veren başka HTTP güvenlik başlıkları da vardır.
* X-Content-Type-Options "nosniff";: Tarayıcıların içeriğin MIME türünü tahmin etmesini engeller.
* X-Frame-Options "DENY";: Sitenizin iframe’ler içinde görüntülenmesini engeller, clickjacking saldırılarını önler.
* X-XSS-Protection "1; mode=block";: Tarayıcıların XSS (Cross-Site Scripting) saldırılarını algılamasını ve engellemesini sağlar.
* Referrer-Policy "no-referrer-when-downgrade";: Yönlendiren bilgilerin nasıl gönderileceğini kontrol eder.
Bu başlıkları Nginx yapılandırmanızdaki server bloğuna ekleyebilirsiniz:
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "DENY";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "no-referrer-when-downgrade";
Bu optimizasyonlar ve güvenlik ipuçları, Nginx sunucunuzu daha hızlı, daha güvenli ve daha verimli hale getirecektir. Her değişiklikten sonra Nginx yapılandırmasını test etmeyi (sudo nginx -t) ve servisi yeniden yüklemeyi (sudo systemctl reload nginx) unutmayın.
Sıkça Sorulan Sorular
1. Neden HTTP/2 kullanmalıyım?
HTTP/2, web performansını önemli ölçüde artıran bir protokoldür. Multiplexing (tek bağlantı üzerinden birden fazla isteği işleme), başlık sıkıştırma ve sunucu itme gibi özellikler sayesinde sayfa yükleme sürelerini kısaltır, bant genişliği kullanımını azaltır ve genel kullanıcı deneyimini iyileştirir. Ayrıca, modern tarayıcılar HTTP/2’yi SSL/TLS ile birlikte zorunlu kıldığından, sitenizin güncel güvenlik standartlarına uyumlu olması için de gereklidir.
2. HTTP/2 ile HTTP/1.1 arasındaki temel farklar nelerdir?
* Bağlantı Yönetimi: HTTP/1.1 her istek için yeni bir TCP bağlantısı açarken veya sınırlı sayıda paralel bağlantı kullanırken, HTTP/2 tek bir TCP bağlantısı üzerinden birden fazla eşzamanlı istek ve yanıtı işleyebilir (multiplexing). Bu, “head-of-line blocking” sorununu çözer.
* Başlık Sıkıştırma: HTTP/2, istek ve yanıt başlıklarını HPACK algoritması kullanarak sıkıştırır, bu da bant genişliği kullanımını azaltır. HTTP/1.1’de başlıklar sıkıştırılmazdı.
* Sunucu İtme (Server Push): HTTP/2, sunucunun istemcinin henüz istemediği kaynakları proaktif olarak göndermesine olanak tanır. HTTP/1.1’de istemci tüm kaynakları tek tek istemek zorundaydı.
* İkili Protokol: HTTP/2, metin tabanlı HTTP/1.1’in aksine ikili bir protokoldür. Bu, daha verimli ayrıştırma ve daha az hata anlamına gelir.
3. Nginx’in hangi sürümü HTTP/2’yi destekler?
Nginx, 1.9.5 sürümünden itibaren HTTP/2 desteği sunmaktadır. Ubuntu 18.04’ün varsayılan depolarında bulunan Nginx sürümü (genellikle 1.14.x veya üzeri), HTTP/2 desteğiyle derlenmiş olarak gelir. Nginx sürümünüzü kontrol etmek için nginx -v komutunu kullanabilirsiniz.
4. HTTP/2 için SSL/TLS zorunlu mu?
Teknik olarak HTTP/2 protokolü SSL/TLS şifrelemesini zorunlu kılmaz. Ancak, Google Chrome, Mozilla Firefox ve Microsoft Edge gibi tüm büyük web tarayıcıları, HTTP/2’yi yalnızca SSL/TLS üzerinden şifrelenmiş bağlantılarda destekler. Bu nedenle, pratikte, web sitenizde HTTP/2 kullanmak istiyorsanız bir SSL/TLS sertifikası (HTTPS) kullanmak zorunludur. Let’s Encrypt gibi ücretsiz seçenekler sayesinde bu artık kolayca yapılabilir.
5. Nginx yapılandırmasında yaptığım değişiklikler neden etkili olmuyor?
Nginx yapılandırmasında bir değişiklik yaptığınızda, bu değişikliklerin etkili olması için Nginx servisini yeniden yüklemeniz veya yeniden başlatmanız gerekir. sudo systemctl reload nginx komutu, servisi kesintiye uğratmadan yapılandırmayı yeniden yükler. Eğer hala sorun yaşıyorsanız, sudo nginx -t komutuyla yapılandırma dosyanızda sözdizimi hatası olup olmadığını kontrol edin ve Nginx hata günlüklerini (/var/log/nginx/error.log) inceleyin.
6. HSTS (Strict-Transport-Security) nedir ve neden kullanmalıyım?
HSTS (HTTP Strict Transport Security), bir web sunucusunun tarayıcılara sitenize her zaman HTTPS üzerinden erişmeleri gerektiğini bildiren bir güvenlik başlığıdır. Bu, kullanıcıların sitenize yanlışlıkla HTTP üzerinden erişmesini engeller ve potansiyel man-in-the-middle saldırılarına karşı koruma sağlar. Ayrıca, tarayıcıların sitenizi doğrudan HTTPS üzerinden yüklemesini sağlayarak performansı artırır. HSTS, web güvenliği için kritik bir bileşendir ve HTTP/2 kullanan tüm siteler için şiddetle tavsiye edilir.
Sonuç
Bu makalede, Nginx’i Ubuntu 18.04 sunucusu üzerinde HTTP/2 desteğiyle nasıl kuracağınızı ve yapılandıracağınızı adım adım öğrendiniz. Süreç, sistemin güncellenmesinden Nginx’in kurulmasına, Let’s Encrypt ile ücretsiz bir SSL/TLS sertifikası alınmasına ve Nginx yapılandırmasının HTTP/2 ve ek güvenlik önlemleri için optimize edilmesine kadar uzandı. Son olarak, yapılandırmanızı doğrulama yöntemlerini ve web sitenizin performansını ve güvenliğini daha da artıracak ek ipuçlarını inceledik.
HTTP/2’nin sağladığı performans avantajları (multiplexing, başlık sıkıştırma, sunucu itme) ve SSL/TLS’nin sağladığı güvenlik (veri şifreleme, kimlik doğrulama), modern web uygulamaları için vazgeçilmezdir. Bu kurulum, kullanıcılarınıza daha hızlı, daha güvenli ve daha keyifli bir web deneyimi sunmanın temelini oluşturur.
Nginx ve HTTP/2 kombinasyonu, web sitenizin geleceğe hazır olmasını sağlarken, Ubuntu 18.04’ün LTS (Uzun Süreli Destek) özelliği sayesinde stabil ve güvenilir bir platform üzerinde çalıştığınızdan emin olursunuz. Web teknolojileri sürekli geliştiği için, Nginx yapılandırmanızı ve SSL/TLS ayarlarınızı düzenli olarak gözden geçirmeniz ve güncel en iyi uygulamaları takip etmeniz önemlidir. Bu sayede, web sitenizin performansını ve güvenliğini her zaman en üst düzeyde tutabilirsiniz.