Nginx HTTPS ve Sıkıştırma Ayarlarının Kapsamı
Bir ödeme sayfası yavaşsa, TLS ve sıkıştırma ayarları incelemeye değer. curl ve bir SSL test aracıyla protokol desteği, sertifika zinciri ve sıkıştırma başlıkları incelenebilir. Ancak OCSP stapling veya Brotli eksikliği tek başına yavaşlığın nedenini göstermez; kazanım, istemci desteğine ve iş yüküne bağlıdır.
Bu rehber Nginx’te TLS 1.3 ve Brotli kurulum örneklerini, gzip geri dönüşünü ve doğrulama adımlarını açıklar. Örneklerde mevcut Let’s Encrypt sertifikaları varsayılır ve bu sağlayıcı OCSP hizmetini kapattığı için stapling etkinleştirilmez. OCSP kullanan diğer sertifika sağlayıcıları için koşulları ve kontrolleri ayrıca ele alacağız; bu bölüm alternatif CA için eksiksiz kurulum tarifi değildir.
TLS 1.3 Neden Önemli? Nasıl Etkinleştiririz?
TLS 1.3, tam TLS 1.2 el sıkışmasına kıyasla bağlantı kurulumundaki ağ turlarını azaltabilir ve eski şifre seçeneklerini kaldırır. Bu, her sayfanın aynı oranda hızlanacağı anlamına gelmez. DNS, TCP/TLS kurulumu, uygulama işlemesi ve gövde aktarımını ayrı ölçerek hangi aşamanın geciktiğini belirleyin.
TLS 1.0 ve 1.1’i kapatıp, gerekli istemci uyumluluğu için TLS 1.2 ile TLS 1.3’ü birlikte sunabilirsiniz. Nginx’in SSL modülü ve TLS 1.3 destekleyen bir TLS kütüphanesi gerekir; OpenSSL tarafında protokol desteği 1.1.1 ile gelmiştir. Bu tarihsel asgari sürüm, güncel desteklenen paket kullanma gereksiniminin yerine geçmez. Kurulu derleme ve kütüphane bilgilerini nginx -V ile kontrol edin.
Aşağıdaki parçayı mevcut http bağlamındaki uygun server yapılandırmasına uyarlayın; tüm nginx.conf dosyasının yerine koymayın. example.com, www.example.com ve dosya yolları tutarlı yer tutuculardır; sertifikanız kullanılan iki adı da kapsamalıdır. Gerçek IDN alan adlarında server_name ve SNI test adını ASCII/Punycode biçiminde kullanın; “örnek.com” ile “ornek.com” aynı alan adı değildir. Örnek, Nginx 1.25.1 veya üzerindeki http2 on sözdizimini kullanır; HTTP/2 modülü ve TLS tarafında ALPN desteği de gereklidir.
server {
listen 443 ssl;
http2 on;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
# TLS 1.2 listesi tek satırdır; TLS 1.3 kümeleri burada seçilmez.
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';
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# HTTPS doğrulandıktan sonra kısa HSTS pilotu; kapsamı ölçerek artırın.
add_header Strict-Transport-Security "max-age=300" always;
root /var/www/example.com/public;
index index.html;
}
ssl_ciphers, TLS 1.2 ve daha eski protokollerin OpenSSL şifre listesi biçimini kullanır; TLS 1.3 kümelerini seçmez. Satır içine gömülü yeni satırlar özgün listeyi geçersiz kılabildiği için değer tek satırdır. Session cache/timeout değerlerini yük ve politikaya uyarlayın. ssl_session_tickets off davranışı protokol ve TLS kütüphanesine bağlıdır; TLS 1.3 yeniden oturum kullanımı bilet temellidir, bu satırı bütün resumption mekanizmalarını kapatma garantisi saymayın. HSTS örneği beş dakikalık pilottur; bir yıllık max-age=31536000 kısa deneme değildir.
Mozilla SSL yapılandırma oluşturucusu seçilen Nginx/kütüphane ve istemci profili için başlangıç ayarları sağlar; canlı sunucunuzu taramaz. Gerçek yapılandırmayı ve el sıkışmasını ayrıca kontrol edin. Birden fazla sanal sunucuda varsayılan sunucu ve TLS kütüphanesi protokol seçimini etkileyebilir; aynı dinleme noktasının bütün adlarını test edin.
Sertifika Zinciri, Küçük Hatalar ve HSTS’in İncelikleri
Sunucu yalnız uç sertifikayı sunarsa eksik ara sertifikalar bazı istemcilerde doğrulama hatasına yol açabilir. ssl_certificate dosyasında önce uç sertifika, sonra uygun ara sertifikalar bulunmalıdır. Let’s Encrypt kurulumunda fullchain.pem ve privkey.pem yaygın dosyalardır; mevcut yolları ve anahtar eşleşmesini doğrulayın. Bu sunum zinciri, başka bir CA ile ssl_stapling_verify için gereken kök dahil güven yapılandırmasıyla aynı şey değildir.
HSTS yalnız geçerli HTTPS yanıtından öğrenilir. Kısa süreyle başlayın; HTTPS sürekliliği sağlandıktan sonra artırın. includeSubDomains bütün alt alanların HTTPS ile çalışmasını gerektirir. preload belirteci tek başına tarayıcı listesine kayıt yaptırmaz; başvuru/kabul ve sonradan çıkarılma ayrı süreçlerdir. Başlığı kaldırmak istemcideki süreyi hemen silmez; max-age=0 bile istemcinin geçerli HTTPS yanıtına ulaşmasını gerektirir. Alt location bloklarında add_header kullanımının mirası değiştirebileceğini ve son yanıt başlıklarını kontrol edin.
OCSP Stapling: Sertifika Sağlayıcısına Bağlı Destek
OCSP kullanan bir istemci, sertifikanın iptal durumunu öğrenmek için sağlayıcıya sorgu gönderebilir; her tarayıcı bunu aynı şekilde yapmaz. Stapling, sunucunun imzalı durum yanıtını alıp TLS el sıkışmasında sunmasını sağlar. Destekleyen istemci ayrı sorgudan kaçınabilir, fakat sertifika zinciri, ad eşleşmesi ve geçerlilik süresi kontrolleri devam eder.
Let’s Encrypt OCSP hizmetini 6 Ağustos 2025’te sonlandırdı; güncel sertifikalarında OCSP URL’si bulunmaz, iptal bilgisi CRL üzerinden yayımlanır. Aşağıdaki ikinci server parçası ilk örneğin alternatifi olarak aynı Let’s Encrypt yollarını korur ve stapling içermez; iki bloğu aynı adla birlikte eklemeyin. Başka bir CA için önce sertifikanın OCSP yanıtlayıcısını ve sağlayıcının desteğini doğrulayın.
server {
listen 443 ssl;
http2 on;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
# Güncel Let's Encrypt sertifikaları OCSP stapling kullanmaz.
# Bu örnekte ssl_stapling ve OCSP resolver ayarı yoktur.
# Diğer TLS ve uygulama ayarlarını ilk örnekteki gibi uyarlayın.
}
OCSP destekleyen bir CA’da Nginx’in sertifika vereni tanıması, yanıtlayıcının adını çözmesi ve ona erişmesi gerekir. ssl_stapling_verify on için ssl_trusted_certificate, sertifika vereni, bütün ara sertifikaları ve kökü içeren doğru PEM güven paketini göstermelidir. Her chain.pem dosyasının kök içerdiğini varsaymayın. Resolver adresini ortamınızın çalışan ve izinli DNS hizmetine göre seçin. Bu koşullar Let’s Encrypt için artık bir stapling kurulumuna dönüşmez.
Aşağıdaki komut TLS 1.3 el sıkışmasını ve varsa sunulan OCSP yanıtını gösterir. Sistemin güven deposu doğru kurulmuş olmalıdır. successful tek başına sertifikanın iyi durumda olduğunu veya OCSP imzasının doğrulandığını kanıtlamaz; Cert Status, zamanlar ve güven/imza doğrulamasını ayrıca değerlendirin. -verify_hostname ve -verify_return_error sertifika ad/zincir kontrolüne yardımcı olur, OCSP yanıtını tüm yönleriyle doğrulayan bir test değildir.
openssl s_client -connect example.com:443 -servername example.com -verify_hostname example.com -verify_return_error -tls1_3 -status < /dev/null
Let’s Encrypt’in 2024 tarihli sonlandırma duyurusu geçmiş planı, 6 Ağustos 2025 kapanış duyurusu tamamlanan değişikliği açıklar. Güncel Let’s Encrypt sertifikasında staple olmaması beklenir. OCSP destekleyen bir CA’da ilk bağlantı yanıtın alınmasını tetikleyebilir; kısa süre sonra tekrar kontrol edin ve Nginx hatalarını inceleyin.
Brotli: Aktarım Boyutu ve CPU Maliyeti
Brotli ile gzip’i aynı içerikte aktarım boyutu, sıkıştırma süresi ve sunucu CPU maliyetiyle karşılaştırın. HTML, CSS ve JavaScript gibi metinler yararlanabilir; zaten sıkıştırılmış görsellerde kazanım sınırlı olabilir. Dinamik sıkıştırma istekte iş yapar; statik dosyaları dağıtım sırasında hazırlamak bu işi istek yolundan çıkarır. Daha küçük dosya her durumda aynı oranda daha hızlı sayfa anlamına gelmez.
Brotli ek ve Nginx derlemesiyle uyumlu modül gerektirir. Dağıtımın desteklediği paket veya yeniden üretilebilir uyumlu derleme kullanın; Nginx yükseltmesinde modülün de güncellenmesi gerekebilir. load_module yalnız main bağlamındadır, http içinde include edilen sıradan conf.d dosyasına konulamaz. Paket modülleri zaten yüklüyorsa tekrar eklemeyin. Aşağıdaki http içeriğini mevcut http bloğuyla birleştirin; ikinci http bloğu oluşturmayın. ngx_brotli deposu modül seçeneklerini açıklar.
# nginx.conf main bağlamı; http bloğunun dışında.
# Paket zaten yüklüyorsa bu load_module satırlarını tekrar eklemeyin.
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
http {
# Mevcut http bloğuna birleştirin; mime.types yüklenmiş olmalıdır.
brotli on;
brotli_comp_level 5; # Ölçerek ayarlanacak başlangıç değeri.
brotli_min_length 1024;
brotli_static on;
brotli_types text/plain text/css text/xml application/javascript
application/json application/xml application/rss+xml
application/xhtml+xml application/ld+json image/svg+xml;
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/javascript application/json
application/xml application/rss+xml image/svg+xml;
# Mevcut server ve diğer http ayarları burada kalır.
}
brotli_static on, uygun istemci isteğinde dosyanın yanındaki .br sürümünü sunabilir. always seçeneği istemci kodlama desteğini yok sayabildiği için bu örneğe uygun değildir. CSS/JS kaynaklarıyla .br dosyalarını aynı build’den üretip birlikte yayımlayın; eski sıkıştırılmış kopya yeni kaynakla karışmamalıdır. Aşağıdaki komutlar en yüksek kaliteyi dağıtım sırasında denemek içindir; build süresini ölçün ve çıktıları yeni bir build dizininde üretin.
brotli -Z -o app.min.js.br app.min.js
brotli -Z -o app.min.css.br app.min.css
gzip, yalnız onu kabul eden istemciler için geri dönüş sağlar; sadece br isteyen istemciye gzip gönderilmemelidir. Bu ngx_brotli modülleri Nginx’in Vary mekanizmasını kullanır; gzip_vary on uygun yanıtlara Vary: Accept-Encoding eklenmesini sağlar. br, gzip ve identity yanıtlarını kaynakta ve CDN üzerinden ayrı test edin. Dinamik gizli değerlerle kullanıcı denetimli metni aynı yanıtta sıkıştırmak sıkıştırma yan kanalı riski taşıyabilir; böyle hassas uçlarda gzip ve Brotli politikasını ayrıca değerlendirin.
HTTP/2, ALPN ve Küçük Dokunuşlar
HTTPS üzerinde HTTP/2 için Nginx HTTP/2 modülü ve ALPN destekleyen TLS kütüphanesi gerekir. HTTP/2, TLS 1.2 ile de çalışabilir; TLS 1.3 zorunlu değildir. Nginx 1.25.1 ve sonrasında örnekteki listen 443 ssl; ile http2 on; biçimini kullanın. Daha eski uyumlu sürümlerde listen 443 ssl http2; sözdizimi kullanılır. Kurulu sürümün belgesini ve gerçek müzakere edilen protokolü doğrulayın; ayarın varlığı hız kazanımını kanıtlamaz.
Önce staging’de mevcut ayarların yedeğini ve geri dönüş adımlarını hazırlayın. nginx -t sözdizimi ve başvurulan dosyaları denetler; canlı TLS ve HTTP davranışını tek başına doğrulamaz. systemd hizmeti nginx olan kurulumlarda aşağıdaki koşullu reload kullanılabilir. Reload eski işçileri kontrollü kapatır, fakat uygulama hataları veya uzun bağlantılar için kesintisizlik garantisi değildir; dönüş kodunu, logları ve yeni bağlantıları kontrol edin.
nginx -t && systemctl reload nginx
TLS, OCSP ve Sıkıştırmayı Doğrulama
Brotli için yalnız HEAD yanıtına güvenmeyin; yeterli boyutta, sıkıştırılabilir ve var olan bir dosyaya GET gönderin. Aşağıdaki komutlar gövdeyi indirip atarken başlıkları gösterir; dosyanın gerçekten doğru çözümlendiğini ayrıca kontrol edin. curl –compressed yalnız derlemesinin desteklediği kodlamaları ister; br testinde açık Accept-Encoding kullanmak seçimi netleştirir.
curl -sS -D - -o /dev/null -H 'Accept-Encoding: br' https://example.com/app.min.js
curl -sS -D - -o /dev/null -H 'Accept-Encoding: gzip' https://example.com/app.min.js
curl -sS -D - -o /dev/null -H 'Accept-Encoding: identity' https://example.com/app.min.js
# Uygun dosyada br/gzip kodlamalarını ve Vary: Accept-Encoding başlığını inceleyin.
# identity yanıtında Content-Encoding olmamalıdır.
TLS testini gerekli TLS 1.2 istemcileri için de tekrarlayın. OCSP destekli CA’da good durumunu, yanıt zamanlarını, zinciri ve Nginx doğrulama hatalarını inceleyin; Let’s Encrypt’te staple aramayın. Brotli yoksa modülün yüklenmesi, MIME türü, dosya boyutu ve proxy’nin Accept-Encoding davranışını kontrol edin. CDN’de cache dolum sırasını değiştirerek br/gzip yanıtının identity istemciye sızmadığını doğrulayın.
Direktiflerin anlamı ve bağlamları için Nginx SSL modülü belgesini kullanın. TLS 1.3 oturumu kurulması sertifika adı, zinciri ve HTTP içeriğinin doğru olduğuna tek başına kanıt değildir. Kontrolleri ayrı tutmak hatanın hangi katmanda olduğunu gösterir.
Sertifika Yenileme, Otomasyon ve Küçük Tuzaklar
Certbot deploy hook, başarılı yenilemeden sonra Nginx’in yeni sertifikayı yüklemesini sağlayabilir. Önce yapılandırmayı test edip sonra reload yapın. Aşağıdaki örnek systemd’de nginx hizmeti ve gerekli yetkiler içindir; gerçek hizmet yöneticinize uyarlayın. Yenileme zamanlayıcısının çalışmasını ve hook hatalarını izleyin; bir komutun tanımlı olması yenileme başarısını garanti etmez.
certbot renew --deploy-hook "nginx -t && systemctl reload nginx"
Yenileme sonrası sunulan sertifikanın seri numarası/geçerliliği, adları ve zincirini doğrulayın. OCSP kullanan başka bir CA’da güven paketi ve yanıtlayıcı değişikliklerini de kontrol edin. Let’s Encrypt için eski OCSP ayarlarını bir resolver ekleyerek düzeltmeye çalışmayın; sağlayıcının güncel iptal mekanizması farklıdır.
OCSP desteklenen kurulumlarda Nginx’in yapılandırılan resolver’a ve sertifikada belirtilen yanıtlayıcıya erişimini doğrulayın. Gerekli DNS ve HTTP çıkışlarını gerçek hedeflere göre değerlendirin; rastgele geniş 80/443 izni her sorunu çözmez. Nginx resolver direktifinin sistemdeki ayrı DNS-over-HTTPS istemcisini kendiliğinden kullandığını varsaymayın. Sertifika yenilemenin ACME erişimi ayrı bir akıştır.
Önbellek, Sıkıştırma ve Nginx’in Renkli Dünyası
Uzun cache süresini içeriği değişince URL’si de değişen herkese açık statik dosyalara uygulayın. .br/.gz varyantları aynı kaynak sürümünü temsil etmeli ve CDN doğru kodlamayı sunmalıdır. Kişisel HTML’i sırf sıkıştırılıyor diye ortak cache’e koymayın. WordPress için tam sayfa önbellekleme rehberi kapsam ve istisna tasarımını tamamlar.
TLS 1.3 erken veri/0-RTT bu temel örneklerde etkinleştirilmez. Erken veri yeniden oynatılabilir; GET yöntemi tek başına uygulama işleminin güvenle tekrarlanabileceğini kanıtlamaz. Önce protokol, sertifika ve kodlama doğruluğunu sağlayın; erken veri ancak uygulama buna göre tasarlanmışsa ayrıca ele alınmalıdır.
Uygulama Sırası ve Kabul Kontrolleri
1) TLS 1.3 ve Temel Güvenlik Ayarları
Derleme/kütüphane desteğini, alan adı-sertifika eşleşmesini ve dosya yollarını doğrulayın. Uygun TLS 1.2/1.3 politikasını uygulayın, nginx -t sonrasında reload yapın ve gerçek el sıkışmasını test edin. HSTS süresini ve kapsamını HTTPS sürekliliğiyle birlikte seçin; mevcut istemcilerdeki politika hemen geri alınamaz.
2) CA Desteğine Göre OCSP Kontrolü
Güncel Let’s Encrypt örneklerinde stapling kullanmayın. Başka bir CA OCSP sunuyorsa issuer, kök/ara güven paketi, resolver ve erişim koşullarını karşılayın. Yanıt durumunu ve zamanlarını inceleyin; yalnız successful satırıyla imza ve güven doğrulamasını tamamlanmış saymayın.
3) Brotli ile Akıcı Yüklemeler
Uyumlu modülü main bağlamında yükleyin, Brotli ayarlarını mevcut http bloğuna birleştirin. Seviye 5 yalnız ölçüm için başlangıçtır. Statik .br dosyalarını aynı build’de üretin, gzip_vary on kullanın ve br/gzip/identity GET varyantlarını doğrulayın. CPU maliyetiyle aktarım boyutunu birlikte karşılaştırın.
4) Ölç, Gözle, Minik Dokunuşlar
CDN ziyaretçi TLS’ini sonlandırıyorsa kaynak Nginx logları CDN-kaynak bağlantısını gösterir; tarayıcı protokol desteği edge tarafında ölçülmelidir. Kaynak ve CDN’de kodlama, cache varyantları, hata oranı ve gecikmeyi ayrı kontrol edin. Yapılandırma geri alınabilir olsa da tarayıcı HSTS/cache kayıtları ve açık bağlantılar farklı sürelerde değişir.
Yaygın Sorunlar ve Tanılama
OCSP eksikliği gördüğünüzde önce CA desteğini kontrol edin; destek yoksa DNS değişikliği çözüm değildir. Destek varsa resolver, erişim, güven zinciri ve ilk fetch süresini inceleyin. Brotli statik dosya sunmuyorsa .br dosyasının varlığı, güncelliği, izinleri ve istemci Accept-Encoding değerini kontrol edin. Dinamik sıkıştırmada yüksek CPU için içerik, seviye ve istek oranını ölçün.
Küçük bir test kapsamı hatayı erken görmeyi kolaylaştırır, riski sıfırlamaz. Örnekleri sertifika ve modül yenilemesini de kapsayan staging testinden geçirin. Çalışan yapılandırmayı, ölçümleri ve geri dönüş adımlarını kaydedin; özel anahtarları sürüm kontrolüne veya paylaşılan loglara koymayın.
Resmî Kaynaklar
Direktif kapsamı için Nginx SSL modülü belgesini, OCSP değişikliğinin geçmişi için Let’s Encrypt sonlandırma duyurusunu ve profil karşılaştırması için Mozilla SSL yapılandırma oluşturucusunu kullanın. Modül ve kütüphane sürümü değişince ilgili koşulları yeniden doğrulayın.
Sonuçları Ölçün ve Ayarları Güncel Tutun
TLS ve sıkıştırma bağlantı kurulumu ile aktarım maliyetini etkiler; uygulama veya veritabanı darboğazını ortadan kaldırmaz. Başarı ölçütü yalnız bir tarayıcıda sayfanın açılması değildir: doğru sertifika/protokol, uygun CA durum kontrolü, doğru kodlama varyantları ve beklenen HSTS kapsamı birlikte çalışmalıdır.
Ölçülen başlangıç değerlerini, seçilen ayarları ve bakım adımlarını birlikte saklayın. Sertifika, Nginx, Brotli modülü veya CDN değişikliğinden sonra kontrolleri tekrarlayın. Boyut ve bağlantı süresi kazanımını gerçek istemcilerde doğrulayın; test edilmemiş örneği üretimde çalıştığı varsayılan reçete olarak kullanmayın.





