Ubuntu'da HTTP / 2 Desteği ile Nginx Nasıl Kurulur 18.04

Bu öğreticinin önceki bir sürümü Sergey Zhukaev tarafından yazılmıştır.

Giriş

Nginx hızlı ve güvenilir bir açık kaynak kodlu bir web sunucusudur. Düşük bellek ayak izi, yüksek ölçeklenebilirlik, yapılandırma kolaylığı ve çok çeşitli protokolleri desteklemesi nedeniyle popülaritesini artırdı.

HTTP / 2, Web'den sunucudan tarayıcıya sayfalar iletmek için kullanılan Köprü Metni Aktarım Protokolünün yeni bir sürümüdür. HTTP / 2, neredeyse yirmi yıl içinde HTTP'nin ilk büyük güncellemesidir: HTTP1.1, web sayfalarının genellikle, satır içi CSS stil sayfası olan tek bir HTML dosyası olduğunda, 1999'da halka geri getirilmiştir. İnternet, o zamandan bu yana önemli ölçüde değişti ve şimdi de HTTP 1.1'in sınırlamalarıyla karşı karşıyayız. Protokol, bir sayfanın parçalarını bir kuyruğa yüklediğinden, çoğu modern web sitesinin potansiyel aktarım hızlarını sınırlar (önceki bölüm, indirme işleminden önce tamamen indirilmelidir) Bir sonraki bölüm başlıyor) ve ortalama bir modern web sayfası indirilmesi için yaklaşık 100 talep gerektirir (her istek bir resim, js dosyası, css dosyası, vb.).

HTTP / 2 bu sorunu çözmektedir, çünkü birkaç temel değişiklik getirir:

  • Tüm istekler, sırada değil, paralel olarak indirilir
  • HTTP üstbilgileri sıkıştırıldı
  • Sayfalar, metin dosyası olarak değil, daha verimli bir ikili olarak aktarılır
  • Sunucular, kullanıcının isteği olmasa bile verileri “zorlayabilir”, bu da yüksek gecikme süresi olan kullanıcılar için hızı artırır

HTTP / 2 şifreleme gerektirmese de, en popüler iki tarayıcı olan Google Chrome ve Mozilla Firefox'un geliştiricileri, güvenlik nedenleriyle HTTP / 2'yi yalnızca HTTPS bağlantıları için destekleyeceğini belirtti. Bu nedenle, HTTP / 2 desteği olan sunucuları kurmaya karar verirseniz, bunları HTTPS ile de güvenceye almanız gerekir.

Bu eğitici, HTTP / 2 desteği ile hızlı ve güvenli bir Nginx sunucusu kurmanıza yardımcı olacaktır.

Ön şartlar

Başlamadan önce birkaç şeye ihtiyacımız olacak:

  • Bir Ubuntu 18.04 sunucusu, bir sudo root kullanıcısı ve bir güvenlik duvarı da dahil olmak üzere Ubuntu 18.04 ilk sunucu kurulum rehberini takip ederek kuruldu.
  • Nginx, Ubuntu 18.04'te Nginx'i Nasıl Yükleyeceğinizi izleyerek yapabileceğiniz sunucunuza yüklendi.
  • Sunucunuzu işaret edecek şekilde yapılandırılmış bir alan adı. Namecheap'ta bir tane satın alabilir veya Freenom'da ücretsiz olarak alabilirsiniz. DigitalOcean öğreticisiyle Ana Bilgisayar Adı Nasıl Kurulur? Bölümünü izleyerek alanların DijitalOcean Damlacıklarına nasıl yönlendirileceğini öğrenebilirsiniz.
  • Sunucunuz için yapılandırılmış bir TLS / SSL sertifikası. Üç seçeneğiniz var:
    • Ubuntu 18.04'te Let's Encrypt ile Nasıl Güvenli Nginx'i takip ederek Let's Encrypt'dan ücretsiz bir sertifika alabilirsiniz.
    • Ayrıca, Ubuntu 18.04'te Nginx için Kendinden İmzalı SSL Sertifikası Nasıl Oluşturulacağını takip ederek kendinden imzalı bir sertifika oluşturabilir ve yapılandırabilirsiniz.
    • Başka bir sağlayıcıdan bir tane satın alabilir ve Nginx'i Ubuntu 18.04'te Nginx için Kendinden İmzalı bir SSL Sertifikası Oluşturma adımından itibaren 2'den 6'ya kadar olan adımları izleyerek kullanabilirsiniz.
  • Nginx, trafiği 80 numaralı bağlantı noktasından önce 443 numaralı bağlantı noktasına yönlendirmek üzere yapılandırıldı; bu, bir önceki önkoşullar tarafından karşılanması gereken.
  • Nginx, 2048 bit veya daha yüksek bir Ephemeral Diffie-Hellman (DHE) anahtarını kullanacak şekilde yapılandırıldı; bu, bir önceki önkoşullar tarafından da ele alınmalıdır.

Adım 1 – HTTP / 2 Desteğini Etkinleştirme

Eğer Nginx yükleme öğretici adımı kurmak sunucu bloğu takip ederseniz, alan adınız için bir sunucu bloğu olmalıdır /etc/nginx/sites-available/your_domain ile server_name zaten uygun şekilde ayarlanmış direktifi. Yapacağımız ilk değişiklik, alanınızın sunucu bloğunu HTTP / 2'yi kullanmak olacak.

Alanınızın yapılandırma dosyasını açın:

  • sudo nano / etc / nginx / siteler kullanılabilir / alan_adiniz

Dosyada, 443 bağlantı 443 ilişkili listen değişkenlerini bulun:

your_domain’>/etc/nginx/sites-available/your_domain...
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
...

Birincisi IPv6 bağlantıları içindir. İkincisi tüm IPv4 bağlantıları içindir. Her ikisi için de HTTP / 2'yi etkinleştireceğiz.

Her listen yönergesini http2 içerecek şekilde http2 :

your_domain’>/etc/nginx/sites-available/your_domain...
listen [::]:443 ssl http2 ipv6only=on;
listen 443 ssl http2;
...

Bu, Nginx'e desteklenen tarayıcılarla HTTP / 2'yi kullanmasını söyler.

Yapılandırma dosyasını kaydedin ve metin düzenleyiciyi düzenleyin.

Nginx yapılandırma dosyalarında değişiklik yaptığınızda, aşağıdaki gibi sözdizimi hataları için yapılandırmayı kontrol etmelisiniz:

  • sudo nginx -t

Sözdizimi hatasız ise, aşağıdaki çıktıyı göreceksiniz:

Output of sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Ardından sunucumuzu daha kısıtlayıcı bir şifreleme listesi kullanacak şekilde yapılandıracağız.

2. Adım – Eski ve Güvenli Olmayan Şifre Paketlerini Kaldırma

HTTP / 2'nin bir kara listesinin eski ve güvensiz şifreleri vardır, bu yüzden onlardan kaçınmalıyız. Şifre takımları, aktarılan verilerin nasıl şifreleneceğini açıklayan şifreleme algoritmalarıdır.

Şifreleri tanımlamak için kullanacağınız yöntem, Nginx için TLS / SSL sertifikalarınızı nasıl yapılandırdığınıza bağlıdır.

Sertifikalarınızı almak için /etc/letsencrypt/options-ssl-nginx.conf kullandıysanız, HTTP / 2 için yeterince güçlü olmayan şifreleri içeren /etc/letsencrypt/options-ssl-nginx.conf dosyasını da oluşturdu. Bu dosyanın değiştirilmesi, Certbot'un gelecekte güncellemeleri uygulamalarını engelleyecektir. Bu nedenle, Nginx'in bu dosyayı kullanmamasını söyleyeceğiz ve kendi şifreler listemizi belirleyeceğiz.

Alan adınız için sunucu bloğu yapılandırma dosyasını açın:

sudo nano /etc/nginx/sites-available/your_domain

options-ssl-nginx.conf dosyasını içeren satırı bulun ve yorumlayın:

your_domain’>/etc/nginx/sites-available/your_domain
# include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot<^>

Bu satırın altında, izin verilen şifreleri tanımlamak için bu satırı ekleyin:

your_domain’>/etc/nginx/sites-available/your_domain
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

Dosyayı kaydedin ve düzenleyiciden çıkın.

Kendinden imzalı sertifikalar kullandıysanız veya bir üçüncü şahıstan sertifika kullandıysanız ve önkoşullara göre yapılandırdıysanız, metin düzenleyicinize /etc/nginx/snippets/ssl-params.conf dosyasını açın:

  • sudo nano /etc/nginx/snippets/ssl-params.conf

Aşağıdaki satırı bulun:

/etc/nginx/snippets/ssl-params.conf...
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
...

Değiştir, bu şekilde görünüyor:

/etc/nginx/snippets/ssl-params.conf
...
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

Dosyayı kaydedin ve düzenleyicinizden çıkın.

Bir kez daha, sözdizimi hataları için yapılandırmayı kontrol edin:

  • sudo nginx -t

Herhangi bir hata görürseniz, adresleri sorun ve tekrar test edin.

Sözdizimi hatası görmediğinizde Nginx'i yeniden başlatın:

  • sudo systemctl nginx'i yeniden yükle

Sunucu yeniden başlatıldığında, çalıştığını doğrulayalım.

3. Adım – HTTP / 2'nin Etkin olduğunu doğrulama

Sunucunun çalıştığından ve HTTP / 2 ile çalıştığından emin olalım.

Sitenize bir istek yapmak ve üstbilgileri görüntülemek için curl komutunu kullanın:

  • curl -I -L https: // alan_adiniz

Aşağıdaki çıktıyı göreceksiniz:

OutputHTTP/1.1 301 Moved Permanently
Server: nginx/1.14.0 (Ubuntu)
Date: Fri, 06 Jul 2018 19:07:12 GMT
Content-Type: text/html
Content-Length: 194
Connection: keep-alive
Location: https://your_domain/

HTTP/2 200
server: nginx/1.14.0 (Ubuntu)
date: Fri, 06 Jul 2018 19:07:12 GMT
content-type: text/html
content-length: 16
last-modified: Fri, 06 Jul 2018 16:55:37 GMT
etag: "5b3f9f09-10"
accept-ranges: bytes

Ayrıca, Google Chrome’da HTTP / 2’nin kullanımda olduğunu doğrulayabilirsiniz. Chrome'u açın ve http://your_domain gidin. Chrome Geliştirici Araçlarını ( Görünüm -> Geliştirici -> Geliştirici Araçları ) açın ve sayfayı yeniden yükleyin ( Görüntüle -> Sayfayı Yeniden Yükle ). sekmesine gidin, Ad ile başlayan tablo başlığı satırına sağ tıklayın ve açılan menüden Protokol seçeneğini seçin.

HTTP / 2'nin çalıştığını belirten yeni bir Protokol sütununda h2 (HTTP / 2 anlamına gelir) görürsünüz.

Bu noktada, HTTP / 2 protokolü aracılığıyla içerik sunmaya hazırsınız. HSTS'yi etkinleştirerek güvenliği ve performansı geliştirelim.

Adım 4 – HTTP Sıkı Aktarım Güvenliğini Etkinleştirme (HSTS)

HTTP istekleriniz HTTPS'ye yönlendirilse de, bu yönlendirmeleri yapmaktan kaçınmak için HTTP Strict Transport Security (HSTS) özelliğini etkinleştirebilirsiniz. Tarayıcı bir HSTS üstbilgisi bulursa, belirli bir süre boyunca tekrar normal HTTP üzerinden sunucuya bağlanmaya çalışmaz. Ne olursa olsun, sadece şifrelenmiş HTTPS bağlantısını kullanarak veri alışverişi yapacaktır. Bu başlık ayrıca bizi protokol düşürme saldırılarına karşı korur.

Düzenleyicinizdeki Nginx yapılandırma dosyasını açın:

sudo nano /etc/nginx/nginx.conf

HSTS'yi etkinleştirmek için bu satırı dosyaya ekleyin:

/etc/nginx/nginx.confhttp {
...
##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
add_header Strict-Transport-Security "max-age=15768000" always;
}
...

max-age saniye cinsinden ayarlanır. 15768000 değeri 6 aya eşittir.

Varsayılan olarak, bu üstbilgi alt alan isteklerine eklenmez. includeSubDomains alan includeSubDomains varsa ve includeSubDomains başvurmasını istiyorsanız, satırın sonuna includeSubDomains değişkenini eklemelisiniz:

/etc/nginx/nginx.confadd_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;

Dosyayı kaydedin ve düzenleyiciden çıkın.

Bir kez daha, sözdizimi hataları için yapılandırmayı kontrol edin:

  • sudo nginx -t

Son olarak, değişiklikleri uygulamak için Nginx sunucusunu yeniden başlatın.

  • sudo systemctl nginx'i yeniden yükle

Sonuç

Nginx sunucunuz artık HTTP / 2 sayfalarını sunuyor. SSL bağlantınızın gücünü test etmek istiyorsanız, lütfen Qualys SSL Lab sayfasını ziyaret edin ve sunucunuza karşı bir test çalıştırın. Her şey doğru şekilde yapılandırılmışsa, güvenlik için bir A + işareti almalısınız.

Bir önceki yazımız olan Ubuntu'da mdadm ile RAID Dizileri Oluşturma 18.04 başlıklı makalemizi de okumanızı öneririz.

About This Author

Comments are closed

%d blogcu bunu beğendi: