- Konu sahibi
- #1
HTTP/2'ye geçiş için gerekenler
HTTP/2'ye geçmek için web sunucusunun HTTPS üzerinde HTTP/2 dinlemesini etkinleştirin, yapılandırmayı doğrulayın, servisi yeniden yükleyin ve istemci tarafından gerçekten HTTP/2 bağlantısı kurulduğunu test edin. Çoğu tarayıcı senaryosunda TLS sertifikası, ALPN desteği ve HTTP/2 destekleyen bir sunucu yazılımı gerekir. HTTP/1.1 desteğini hemen kaldırmayın; HTTP/2 kullanamayan istemciler için geri dönüş olarak bırakın.
HTTP/2 nasıl çalışır?
HTTP/1.1'de istekler çoğunlukla metin tabanlı ve bağlantı başına daha sınırlı bir akışla işlenirken HTTP/2, aynı TCP bağlantısı üzerinde birden fazla isteği akışlar halinde taşıyabilir. Başlıklar sıkıştırılır ve sunucu, uygun gördüğü kaynakları önceliklendirebilir. Bu geçiş HTML, CSS veya uygulama kodunu HTTP/2'ye özel biçimde yeniden yazmayı gerektirmez; değişiklik öncelikle TLS sonlandıran web sunucusu, ters proxy veya CDN katmanında yapılır.
Tarayıcıların kullandığı normal HTTP/2 senaryosu HTTPS'tir. Sadece sunucuda HTTP/2'yi açmak yeterli değildir: alan adının HTTPS üzerinden erişilebilir olması, sertifikanın geçerli olması ve ön taraftaki CDN ya da yük dengeleyicinin bağlantıyı HTTP/1.1'e düşürmemesi gerekir.
Varsayımsal Nginx örneği
Aşağıdaki örnekte HTTPS zaten yapılandırılmış, sertifika yolları da sunucuda mevcut kabul edilmiştir.
example.com yerine kendi alan adınızı, sertifika yollarını da gerçek yollarla değiştirin. Örnek Nginx 1.25.1 ve sonrasındaki http2 on; direktifini kullanır. Eski sürümlerde görülen listen satırındaki http2 parametresini güncel yapılandırmayla karıştırmayın. Kurulu sürümü ve http_v2 modül desteğini nginx -V ile kontrol edin. Mevcut uygulamanızın proxy/FastCGI ve erişim kurallarını bu örnekle bütünüyle değiştirmeyin.
Kod:
server {
listen 443 ssl;
http2 on;
server_name example.com;
ssl_certificate /etc/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/ssl/example.com/privkey.pem;
root /var/www/example.com;
index index.html;
}
Uygulama sırası:
- HTTPS sanal sunucunuzun yedeğini alın ve HTTP/2 desteğinin kurulu olduğunu kontrol edin.
- İlgili HTTPS sunucusunda
listen 443 ssl;dinleyicisine ek olarakhttp2 on;kullanın. HTTP için kullanılan 80 numaralı dinleyiciyi HTTP/2'ye çevirmeye çalışmayın; HTTP'den HTTPS'e yönlendirme ayrı kalabilir. - Yapılandırmayı yeniden yüklemeden önce
nginx -tkomutunu çalıştırın. - Test başarılıysa
systemctl reload nginxile yeniden yükleyin. Yeniden başlatma yerine yeniden yükleme, mevcut bağlantıları gereksiz yere kesmemek için tercih edilir. - Önce
curl -Vçıktısında HTTP2 özelliğini doğrulayın. HTTP/2 destekli curl ilecurl -sS -o /dev/null -w '%{http_version}\n' --http2 https://example.com/komutunu çalıştırın.
Beklenen çıktı
2 değeridir. Bu değer, test edilen HTTPS uç noktasında HTTP/2 bağlantısı kurulduğunu gösterir. 1.1 görürseniz HTTP/2 sunucuda açık olsa bile CDN, proxy, yük dengeleyici veya istemci bağlantıyı HTTP/1.1 olarak kuruyor olabilir. Sertifika, ALPN veya yapılandırma hatası görürseniz önce nginx -t çıktısını ve ilgili servis günlüklerini inceleyin; başarısız yapılandırmayı zorla yeniden yüklemeyin.Hangi katmanı değiştirmelisiniz?
HTTP/2'nin etkinleştirileceği yer, ziyaretçinin bağlandığı ilk HTTPS katmanıdır. Sunucu doğrudan internete açıksa web sunucusu; CDN kullanıyorsanız CDN'nin istemciye bakan HTTPS ayarı; ters proxy kullanıyorsanız dış proxy katmanı belirleyicidir. Proxy ile arka uç arasındaki bağlantının HTTP/1.1 olması, ziyaretçinin proxy ile HTTP/2 konuşmasını tek başına engellemez. Ancak proxy'nin dışarıya HTTP/2 sunması ve isteği doğru arka uca iletmesi gerekir.
Aşağıdaki ayrım, hangi sonucu yorumlayacağınızı netleştirir:
| Test sonucu | Muhtemel anlamı | Sonraki adım |
|---|---|---|
| 2 | Uç nokta HTTP/2 kabul ediyor | Tarayıcı geliştirici araçlarında protokolü ayrıca doğrulayın |
| 1.1 | HTTP/2 ilan edilmiyor veya aradaki katman düşürüyor | ALPN, CDN/proxy ve sunucu dinleyicisini kontrol edin |
| TLS ya da bağlantı hatası | HTTPS veya sertifika sorunu HTTP/2 testinden önce başarısız oluyor | Önce normal HTTPS erişimini düzeltin |
Geçişten sonra sayfanın HTML, CSS, JavaScript, görseller, oturum açma ve dosya yükleme işlemlerini kontrol edin. HTTP/2, uygulama hatalarını kendiliğinden düzeltmez; bağlantı protokolü değişse de uygulamanın döndürdüğü durum kodları ve içerik başlıkları ayrıca test edilmelidir.
Sık yapılan hatalar
- Sadece arka uçta HTTP/2'yi açmak: Kullanıcı CDN'ye veya ters proxy'ye bağlanıyorsa gerçek dış uç nokta hâlâ HTTP/1.1 sunabilir.
- HTTP/1.1'i tamamen kapatmak: Eski istemciler, özel istemciler veya bazı izleme araçları erişemeyebilir. Önce uyumluluğu gözlemleyin.
- Sertifikayı kontrol etmeden HTTP/2 testi yapmak: Geçerli HTTPS bağlantısı kurulmadan HTTP/2 sonucu yorumlanamaz.
- Eski server push ayarlarını kopyalamak: Temel HTTP/2 geçişi bunu gerektirmez; Nginx’in güncel sürümlerinde eski push direktifleri de artık kullanılmaz.
- Tarayıcı yerine yalnızca sunucu yapılandırmasına güvenmek: Komut satırı ve tarayıcı geliştirici araçları, gerçek istemci bağlantısının hangi protokolü kullandığını ayrı ayrı doğrulamalıdır.
Sık sorulan sorular
HTTP/2 için web sitesindeki tüm bağlantıları değiştirmek gerekir mi?
Hayır. Aynı alan adına ait HTTPS kaynakları normal URL biçimleriyle çalışmaya devam eder. HTTP/2, TCP üzerinde HTTP iletişiminin aktarım biçimini belirleyen uygulama katmanı protokolüdür; bağlantı adreslerine ayrıca bir
h2:// öneki eklenmez.HTTP/2 etkinleşince HTTP/3 de otomatik olarak açılır mı?
Hayır. HTTP/3 ayrı bir protokol ve ayrı bir sunucu/CDN yapılandırmasıdır. HTTP/2 geçişini başarıyla doğrulamak HTTP/3 desteğinin bulunduğunu göstermez.