Ubuntu’da HTTP/2 Desteği ile Nginx Kurulumu (Tam Rehber)
Nginx, dünyanın en yaygın şekilde dağıtılan web sunucularından biri olup, olağanüstü performansı, düşük bellek ayak izi ve binlerce eşzamanlı bağlantıyı işleme yeteneği ile ünlüdür. HTTP/2 ile birleştirildiğinde, Nginx daha da güçlü bir platform haline gelir — çoğullanmış istekleri, başlık sıkıştırmasını, sunucu push’unu ve dramatik olarak azaltılmış sayfa yükleme sürelerini etkinleştirir.
Bu kapsamlı kılavuz, Ubuntu 20.04 ve Ubuntu 22.04 LTS üzerinde tam HTTP/2 desteği ile Nginx’i kurmak için gereken her adımda size yol gösterir; ilk kurulumdan SSL yapılandırması, sunucu bloğu optimizasyonu ve canlı doğrulamaya kadar.
> Bu kılavuz kimin için? Bir Linux sunucusunda web performansını en üst düzeye çıkarmak isteyen sistem yöneticileri, geliştiriciler ve web sitesi sahipleri. VPS Hosting planında veya bir Dedicated Server‘da sitenizi çalıştırıyorsanız, bu öğretici doğrudan ortamınız için geçerlidir.
HTTP/2 Nedir ve Neden Önemlidir?
HTTP/2, Hypertext Transfer Protocol’ün ikinci ana sürümüdür ve RFC 7540 standardında tanımlanmıştır. 1997’den beri kullanılan HTTP/1.1’in performans sınırlamalarını gidermek için tasarlanmıştır.
HTTP/2’nin HTTP/1.1’e göre temel avantajları:
| Özellik | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Multiplexing | Bağlantı başına bir istek | Birden fazla eşzamanlı istek |
| Başlık sıkıştırması | Düz metin başlıkları | HPACK sıkıştırması |
| Sunucu push | Desteklenmiyor | Destekleniyor |
| İkili protokol | Metin tabanlı | İkili çerçeveleme |
| Bağlantı yeniden kullanımı | Sınırlı | Tamamen kalıcı |
| Gecikme | Daha yüksek | Önemli ölçüde azaltılmış |
Web sitesi sahipleri için HTTP/2’yi etkinleştirmek, doğrudan daha hızlı sayfa yüklenmesi, daha iyi Core Web Vitals puanları ve geliştirilmiş SEO sıralaması anlamına gelir — çünkü Google sayfa hızını sıralama sinyali olarak kullanır.
> Önemli: HTTP/2, HTTPS (TLS/SSL) gerektirir. Herhangi bir modern tarayıcıda HTTP/2’yi şifrelenmemiş bir bağlantı üzerinde çalıştıramazsınız. Bu nedenle SSL sertifikası almak bu kılavuzda zorunlu bir adımdır. Etki alanınız için güvenilir bir sertifikaya ihtiyacınız varsa, AlexHost tüm kullanım durumları için SSL Sertifikaları sunmaktadır.
Ön Koşullar
Başlamadan önce aşağıdakilerin hazır olduğundan emin olun:
- Ubuntu 20.04 LTS veya Ubuntu 22.04 LTS çalıştıran bir sunucu (her iki sürüm için adımlar neredeyse aynıdır)
sudoayrıcalıklarına sahip root olmayan bir kullanıcı veya doğrudan root erişimi- Kayıtlı bir alan adı sunucunuzun IP adresine A kaydı aracılığıyla yönlendirilmiş
- 80 ve 443 numaralı bağlantı noktaları açık güvenlik duvarınızda (UFW veya iptables)
- Linux komut satırı hakkında temel bilgi
Henüz bir alan adınız yoksa, doğrudan AlexHost Alan Adı Kaydı aracılığıyla bir tane kaydedebilir ve sunucunuza birkaç dakika içinde yönlendirebilirsiniz.
Adım 1 — Sistem Paket İndeksini Güncelleyin
Her zaman paket indeksinizi yenileyerek en son kullanılabilir yazılım sürümlerini yüklediğinizden emin olarak başlayın:
sudo apt update && sudo apt upgrade -yBu komut yerel paket listesini günceller ve sisteminizde zaten yüklü olan eski paketleri yükseltir.
Adım 2 — Nginx Yükleme
Nginx Paketini Yükle
Ubuntu'nun varsayılan depoları Nginx'in kararlı bir sürümünü içerir. Bunu şu şekilde yükle:
sudo apt install nginx -yNginx Hizmetini Başlat
Yüklendikten sonra Nginx hizmetini hemen başlat:
sudo systemctl start nginxNginx'i Önyüklemede Otomatik Olarak Başlayacak Şekilde Etkinleştir
Nginx'in sunucu her yeniden başlatıldığında otomatik olarak başlamasını sağla:
sudo systemctl enable nginxNginx'in Çalışıp Çalışmadığını Doğrula
Hizmetin etkin ve çalışıyor olduğunu doğrula:
sudo systemctl status nginxŞuna benzer bir çıktı görmelisin:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since ...Nginx'i Güvenlik Duvarından Geçir
Sunucunda UFW etkinse, HTTP ve HTTPS trafiğine izin ver:
sudo ufw allow 'Nginx Full'
sudo ufw statusNginx Full hem 80 numaralı bağlantı noktasını (HTTP) hem de 443 numaralı bağlantı noktasını (HTTPS) açar; her ikisi de bu kurulum için gereklidir.
Adım 3 — OpenSSL Yükleyin
HTTP/2, TLS’ye bağlıdır ve TLS da OpenSSL’ye bağlıdır. Tüm kriptografik bağımlılıkların kullanılabilir olduğundan emin olmak için yükleyin:
sudo apt install openssl -yYüklü sürümü doğrulayın:
openssl versionOpenSSL 3.0.x veya benzeri bir çıktı görmelisiniz. 1.0.2’nin üzerindeki herhangi bir sürüm, HTTP/2 için gerekli olan şifre paketlerini tam olarak destekler.
Adım 4 — Let’s Encrypt ile Ücretsiz SSL Sertifikası Alın
Let’s Encrypt, tüm büyük tarayıcılar tarafından güvenilen ücretsiz, otomatik olarak yenilenebilir SSL/TLS sertifikaları sağlar. Certbot istemcisi tüm süreci basit hale getirir.
Certbot ve Nginx Eklentisini Yükleyin
sudo apt install certbot python3-certbot-nginx -ySSL Sertifikanızı İsteyin
your_domain.com yerine gerçek kayıtlı alan adınızı yazın:
sudo certbot --nginx -d your_domain.com -d www.your_domain.comCertbot şunları yapacaktır:
- HTTP challenge aracılığıyla alan adı sahipliğini doğrulayın
- Let’s Encrypt’ten sertifikayı yayınlayın
- Sertifikayı kullanmak için Nginx yapılandırmasını otomatik olarak değiştirin
- HTTP’den HTTPS’ye yönlendirmeler ayarlayın
Etkileşimli istemleri izleyin. HTTP trafiğini HTTPS’ye yönlendirip yönlendirmeyeceğiniz sorulduğunda, seçenek 2’yi (Yönlendir) seçin — bu önerilen seçimdir.
Otomatik Sertifika Yenilemesini Doğrulayın
Let’s Encrypt sertifikaları 90 gün sonra sona erer. Certbot, bunları otomatik olarak yenilemek için bir cron işi veya systemd zamanlayıcısı yükler. Yenileme işlemini kuru çalıştırmayla test edin:
sudo certbot renew --dry-runHiçbir hata görünmezse, otomatik yenileme doğru şekilde yapılandırılmıştır.
> İpucu: Birden fazla alan adı veya joker sertifikaları olan üretim ortamları için, SSL altyapınız üzerinde tam kontrol için bir Dedicated Server düşünün.
Adım 5 — Nginx’i HTTP/2 için Yapılandırın
SSL yerinde olduğuna göre, Nginx sunucu bloğu yapılandırmasında HTTP/2’yi açıkça etkinleştirmeniz gerekir.
Nginx Yapılandırma Dosyasını Açın
Varsayılan site yapılandırması şu konumda bulunur:
sudo nano /etc/nginx/sites-available/defaultEtki alanınız için özel bir sunucu bloğu oluşturduysanız (önerilir), bunun yerine o dosyayı açın:
sudo nano /etc/nginx/sites-available/your_domain.comHTTP/2’yi Etkinleştirmek için Sunucu Bloğunu Güncelleyin
listen 443 ssl; yönergesini bulun. Certbot bunu otomatik olarak ekleyecektir. http2 içerecek şekilde değiştirin:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your_domain.com www.your_domain.com;
# SSL Certificate paths (set by Certbot)
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/your_domain.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
}
# HTTP to HTTPS redirect block
server {
listen 80;
listen [::]:80;
server_name your_domain.com www.your_domain.com;
return 301 https://$host$request_uri;
}Kritik değişiklik listen satırındadır: ssl sonrasına http2 eklemek, o sanal ana bilgisayar için HTTP/2 protokolünü etkinleştirir.
Kaydedin ve Çıkın
CTRL + X tuşuna basın, ardından Y tuşuna basın, sonra Enter tuşuna basarak dosyayı kaydedin ve nano editörden çıkın.
Adım 6 — Nginx HTTP/2 Yapılandırmanızı Optimize Edin
HTTP/2’yi basitçe etkinleştirmek iyi bir başlangıçtır, ancak ek optimizasyonlar uygulamak kurulumunuzdan maksimum performans elde etmenizi sağlar.
Önerilen SSL ve Performans Ayarları
Aşağıdaki yönergeleri server bloğunuzun içine ekleyin veya doğrulayın:
# Modern TLS protocols only
ssl_protocols TLSv1.2 TLSv1.3;
# Strong cipher suites compatible with HTTP/2
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# SSL session caching for performance
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# HTTP Strict Transport Security (HSTS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# Additional security headers
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# Gzip compression (complements HTTP/2)
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;> HTTP/2 ve Gzip Hakkında Not: HTTP/2 kendi HPACK başlık sıkıştırmasını kullanır, ancak yanıt gövdeleri için Gzip’i etkinleştirmek metin tabanlı varlıklar için yine de önemli bant genişliği tasarrufu sağlar.
Adım 7 — Nginx Yapılandırmasını Test Edin
Nginx’i yeniden başlatmadan önce yapılandırmayı söz dizimi hataları açısından test etmeyin. Yanlış yapılandırılmış bir dosya tüm web sunucunuzu kapatabilir.
Yerleşik yapılandırma testini çalıştırın:
sudo nginx -tBaşarılı bir test şunu üretir:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulHerhangi bir hata görürseniz, çıktıyı dikkatle inceleyin. Hata mesajı, sorunun algılandığı dosya adını ve satır numarasını içerecektir.
Adım 8 — Nginx’i Yeniden Başlatın ve Değişiklikleri Uygulayın
Yapılandırma testi başarılı olduktan sonra, tüm değişiklikleri uygulamak için Nginx’i yeniden başlatın:
sudo systemctl restart nginxAlternatif olarak, sıfır kapalı kalma süresi yeniden yüklemesini tercih ederseniz (yapılandırma değişikliklerini etkin bağlantıları kesmeden uygular):
sudo systemctl reload nginxHTTP/2 etkinleştirmesi için özellikle, yeni protokol ayarlarının tam olarak başlatılmasını sağlamak için tam bir yeniden başlatma önerilir.
Adım 9 — HTTP/2’nin Aktif Olduğunu Doğrulayın
Nginx’i yeniden başlattıktan sonra, HTTP/2’nin aslında istemcilere sunulduğunu aşağıdaki yöntemlerden birini kullanarak doğrulayın.
Yöntem 1: curl Kullanarak
curl komut satırı aracı, kullanılan protokol sürümünü bildirebilir:
curl -I --http2 https://your_domain.comYanıt başlığını arayın:
HTTP/2 200HTTP/2 200 görürseniz, HTTP/2 doğru şekilde çalışıyor demektir.
Yöntem 2: OpenSSL Komutu Kullanarak
openssl s_client -connect your_domain.com:443 -alpn h2Çıktıda şunu arayın:
ALPN protocol: h2h2 HTTP/2 için ALPN tanımlayıcısıdır. Bunu görürseniz, sunucunuz TLS el sıkışması sırasında HTTP/2 desteğini doğru şekilde duyuruyor demektir.
Yöntem 3: Tarayıcı Geliştirici Araçlarını Kullanarak
- Web sitenizi Google Chrome veya Mozilla Firefox‘ta açın
- Geliştirici Araçlarını açmak için
F12tuşuna basın - Network sekmesine gidin
- Sayfayı yeniden yükleyin (
F5veyaCtrl+R) - İstek listesindeki herhangi bir sütun başlığına sağ tıklayın ve Protocol sütununu etkinleştirin
- Etki alanınızın istekleri için protokol olarak
h2listelenmiş olmalıdır
Yöntem 4: Çevrimiçi HTTP/2 Test Aracı Kullanarak
https://tools.keycdn.com/http2-test adresini ziyaret edin ve etki alanınızı girin. Araç, HTTP/2’nin aktif olup olmadığını doğrulayacak ve sunucunuzun TLS yapılandırması hakkında ek ayrıntılar sağlayacaktır.
Yaygın Sorunları Giderme
Tarayıcıda HTTP/2 Yapılandırılmasına Rağmen Gösterilmiyor
- Neden: Tarayıcı eski bir HTTP/1.1 bağlantısını önbelleğe aldı.
- Çözüm: Tarayıcı önbelleğini ve çerezleri temizleyin veya özel/gizli pencerede test edin.
nginx -t SSL Sertifikası Hatası Döndürüyor
- Neden: Yapılandırma dosyasında yanlış sertifika yolları.
- Çözüm:
sudo ls /etc/letsencrypt/live/your_domain.com/kullanarak tam yolları doğrulayın vessl_certificateilessl_certificate_keyyönergelerini buna göre güncelleyin.
Port 443 Erişilebilir Değil
- Neden: Güvenlik duvarı HTTPS trafiğini engelliyor.
- Çözüm:
sudo ufw allow 443/tcpkomutunu çalıştırın vesudo ufw statusile doğrulayın.
Certbot Alan Adı Doğrulaması Başarısız Oluyor
- Neden: DNS A kaydı henüz yayılmadı veya port 80 engelleniyor.
- Çözüm:
dig your_domain.com Akullanarak alan adınızın doğru IP’ye çözümlendiğini doğrulayın. ACME HTTP challenge’ı için port 80’in açık olduğundan emin olun.
Nginx’te unknown directive "http2" Hatası
- Neden: Nginx sürümü çok eski (1.9.5 öncesi) veya HTTP/2 desteği olmadan derlenmiş.
- Çözüm: Nginx’i yükseltin. Ubuntu 20.04+ üzerinde, varsayılan depo sürümü HTTP/2’yi destekler. Ayrıca resmi Nginx PPA’sını ekleyebilirsiniz:
sudo add-apt-repository ppa:nginx/stable && sudo apt update && sudo apt upgrade nginx.
Sonuç
Ubuntu üzerinde tam HTTP/2 desteğiyle Nginx’i başarıyla yüklediniz. İşte gerçekleştirilen her şeyin özeti:
- ✅ Nginx’i yükledik ve sistem hizmeti olarak etkinleştirdik
- ✅ Let’s Encrypt ve Certbot aracılığıyla ücretsiz, otomatik yenilenen SSL sertifikası aldık
- ✅ Nginx sunucu bloğunu
http2yönergesiyle yapılandırdık - ✅ TLS sertleştirmesi, OCSP stapling, HSTS ve Gzip sıkıştırması uyguladık
- ✅ Yapılandırmayı test ettik ve HTTP/2’nin etkin olduğunu doğruladık
HTTP/2’yi etkinleştirmek, bir web sunucusunda yapabileceğiniz en yüksek etkili, en düşük çabaya sahip optimizasyonlardan biridir. Güçlü TLS ayarları ve uygun önbellek başlıklarıyla birleştirildiğinde, sayfa yükleme sürelerini, Core Web Vitals puanlarını ve sonuç olarak sitenizin arama motoru sıralamalarını önemli ölçüde iyileştirir.
Yığını güncel tutun: Nginx, OpenSSL ve Certbot’u en son güvenlik yamaları ile güncel tutmak için düzenli olarak sudo apt update && sudo apt upgrade komutunu çalıştırın.
Sunucu Performansınızı Daha İleri Taşıyın
HTTP/2’den elde edilen performans kazançları, hızlı ve güvenilir altyapıda en belirgin şekilde görülür. Şu anda paylaşılan barındırmada iseniz ve kaynak sınırlarına çarpıyorsanız, adanmış kaynaklar ve tam root erişimi için bir VPS Barındırma planına yükseltmeyi düşünün. Yüksek trafikli uygulamalar için, Adanmış Sunucular eşsiz ham performans sunar. Komut satırı yerine grafik arayüzü tercih ederseniz, bir cPanel’li VPS ile sunucu ortamınızı kolayca yönetebilirsiniz.
Altyapı ihtiyaçlarınız ne olursa olsun, AlexHost, Nginx, HTTP/2 ve tüm web yığınını en yüksek verimlilikle çalıştırmak için platformu sağlar.
tasarruf edin