Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Web_in_Çalışma_Mimarisi.pdf

Gökhan Şengün
April 09, 2020
230

 Web_in_Çalışma_Mimarisi.pdf

Gökhan Şengün

April 09, 2020
Tweet

Transcript

  1. Gökhan Şengün Bağımsız DevOps Danışmanı – Çözüm Mimarı (Netaş) Blog:

    https://gokhansengun.com Medium: https://medium.com/@gokhansengun Twitter: @gokhansengun
  2. • Bir web sayfası tarayıcıya iletilene kadar hangi yoldan geçer?

    • Tarayıcı, web sunucu, web proxy, vekil sunucu, yük dağıtıcı hangi işlevleri yerine getirir? • HTTP protokolü nasıl çalışır? • HTTP protokolünü etkin kullanmaya yarayan incelikler nelerdir? • Tarayıcıların sunduğu web geliştirmeye yardımcı araçlar nasıl kullanılır? • Bir web uygulaması geliştirilirken problem çözmede kullanılacak yardımcı araçlar nelerdir? Hedef
  3. • Web sunucularla HTTP protokolü ile konuşarak kullanıcıya web sayfalarını

    gösterir • Web sunucularla TLS protokolü ile güvenli bir iletişim kanalı açarak güvenli bir veri kanalı oluşturur • Kullanıcının ziyaret ettiği sitelerdeki kaynakları önbelleğe alarak sayfalardaki gezinti deneyimini iyileştirir • DNS isteklerinin sonucunu önbelleğe alarak sonraki isteklerin daha hızlı yapılabilmesini sağlar • HTML, CSS ve JS ile web sayfasının mizanpajını ayarlar Tarayıcı
  4. • HTTP web istemci ve sunucularının konuştuğu protokoldür • HTTP

    «stateless» bir protokoldür ancak «stateful» olan TCP üzerinden taşınır • «stateless» protokol, istemci ve sunucu arasındaki her bir paketin birbirinden bağımsız şekilde işlenmesine olanak tanır. Sunucu oturum bilgisine dair bir bilgi tutmaz, bu bilgi sunucuya istemci tarafından iletilir HTTP
  5. • HTML, JS, CSS, imaj, font gibi kaynakları istemcilerin erişimine

    sunar • Genellikle 443 (HTTPS) ve 80 (HTTP) TCP portundan istemcilerden gelecek bağlantıları kabul eder • Nginx, Apache, IIS vb örnekleri bulunur Web Sunucu
  6. • Kullanıcılara özel dinamik sayfaların üretilebilmesi için bir programlama altyapısı

    sağlar • Kullanıcıların oturum verilerini tutar ve kalıcı bir depolama ortamında tutulmasını sağlar • Web uygulamasının işlevsel olabilmesi için veri tabanı ve diğer üçüncü parti uygulamalarla iletişim kurar • Tomcat, JBoss, Kestrel, vb örnekleri bulunur Uygulama Sunucusu
  7. • Web sunucuların önünde konumlandırılarak web uygulamasına gelen yükün dengeli

    olarak dağıtımını yapar • Arkasında bulunan sunucuların sağlığını kontrol eder ve ona göre yönlendirme yapar • HAProxy, Nginx, Citrix, F5, vb örnekleri bulunur Yük Dağıtıcı (Load Balancer)
  8. • HW desteği olan yük dağıtıcılarda TLS trafiğini çözerek web

    sunucular üzerindeki yükü azaltır (SSL offloading) • Basit kullanım senaryolarında statik istekleri önbelleğe alarak uygulama performansını artırır • Sunucuya gelen istekleri veya sunucudan gelen cevapları değiştirebilir • Bazı istekleri bloklayabilir • Kullanıcıların uygulamaya belirli bir sürede gönderdikleri istekleri sınırlayabilir (rate limiting) Yük Dağıtıcı (Load Balancer)
  9. • Kullanıcıdan kullanıcıya değişmeyen JS, CSS, HTML, imaj kaynaklarını önbelleğe

    alarak buradan hızlı bir şekilde sunarlar • Origin adını verdikleri web sunucu veya uygulama sunucusundan verileri belirli aralıklarla alırlar • Statik veri veya sıklıkla değişmeyen referans verileri sunarlar • Basit bir anahtar-değer (key-value) deposuna benzer • Genellikle kullanıcılarına bir betik dili sağlarlar • Varnish, Nginx, vb örnekleri vardır Önbellek Sunucusu
  10. • Önbellek sunucuları gibi çalışırlar • Veriyi kullanıcıya yakın bir

    yerde depolayıp sayfa gezinme deneyimini iyileştirirler • Kullanıcı istekleri uygulamanın bulunduğu veri merkezine ulaşmadan cevaplanmış ve sınırlı/değerli kaynaklar korunmuş olur • Web uygulama performansını ve ölçeklemesini artırmada, yaygınca kullanılan çok etkili bir araçtır İçerik Dağıtım Ağları (CDN)
  11. • Yük dağıtıcının önünde konumlandırılarak sunucuya iletilen bütün trafiği izlerler

    • Şüpheli veya DDoS atak trafiği tespit ederek siteyi bloklar ya da gerçek bir kullanıcı olup olmadığını anlamak için bir No CAPTCHA, reCAPATCHA sayfası gösterbilirler • Efektif bir şekilde bazı IP’lerden ya da IP bloklarından gelen trafiği engelleyebilirler • Kullanıcıların uygulamaya belirli bir sürede gönderdikleri istekleri sınırlayabilir (rate limiting) • SQL injection, vb atakları tespit ederek uygulamaya gelmeden trafiği bloklarlar DDoS Koruma Sistemleri ve WAF
  12. • Web uygulaması ile kullanıcı trafiği arasına girer • Global

    içerik dağıtım ağı olarak kullanılır • DDoS koruma görevi görür • WAF (Web Application Firewall) olarak çalıştırılabilir • Rate Limiting yapabilir • Web uygulamasının kodunda değişiklik yapmadan • Başlık optimizasyonu yapar • JS, CSS, vb dosyaları «minify» eder • Otomatik içerik önbelleklemesi yapar Örnek: Cloudflare
  13. • İstemci ve sunucu arasındaki trafiğin arasına girerek • trafiğin

    incelenmesine • trafiğin kaydedilmesine • HTTP paketlerinin değiştirilmesine • kaynakların önbelleklenmesine • sunucu IP’lerinin gizlenmesine olanak tanır • Forward ve Reverse Proxy olarak ikiye ayrılır • Popüler HTTP Proxy’ler Fiddler, Burp Suite, Squid’dir HTTP Proxy
  14. HTTP Metotları Methot Kullanım GET Kaynağı sunucudan çeker POST Bir

    kaynağı oluşturur ya da günceller [Idempotent değil] PUT Bir kaynağı oluşturur ya da günceller [Idempotent] DELETE Bir kaynağı siler HEAD Bir kaynağın sadece başlık bilgisini alır
  15. HTTP Dönüş Kodları Kod Anlamı 1xx Bilgi amaçlı, istemci taraflı

    aksiyon ihtiyacı yok 2xx Sunucu işlemi başarılı bir şekilde yerine getirdi 3xx İstemcinin bir aksiyon alması gerekiyor (genellikle yeniden yönlendirme) 4xx İstemcinin yaptığı istekte hata var (sunucu istemciye senin hatan diyor) 5xx Sunucu isteği işlerken bir hata ile karşılaştı (sunucu istemciye kusura bakma benim hatam diyor)
  16. Accept (İstek) Kabul edilen MIME için kullanılır. İstemci hangi cevap

    tiplerini tanıdığını ve tercih ettiğini sunucuya bildirir. Sentax: • Accept: <MIME_type>/<MIME_subtype> Örnek: • Accept: application/json, text/xml;q=0.9, */*;q=0.8
  17. Content-Type (Cevap) Sunulan MIME istemciye söylenir Örnekler: • Content-Type: text/html;

    charset=utf-8 • Content-Type: application/json • Content-Type: text/xml
  18. Host (İstek) Sunucuya istekte bulunulan web sayfasının adresi söylenir. Aynı

    IP’de sunulan birden fazla web sitesinin birbirinden ayırt edilmesi için muhakkak gereklidir Örnekler: • Host: gokhansengun.com • Host: localhost:8090
  19. Accept-Languge (İstek) Dil tercihine yönelik istemciden sunucuya bir ipucudur Örnekler:

    • Accept-Language: en-US,en;q=0.8 • Accept-Language: tr-TR, tr;q=0.9, en;q=0.8, *;q=0.5
  20. User-Agent (İstek) İstemcinin tipi ile ilgili istemciden sunucuya bir ipucudur

    Örnek: • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36
  21. Cache-Control (Cevap) Sunucunun istemciye kadar olan bütün ağ ekipmanlarına verdiği

    ipucudur, ilgili kaynağın önbelleklenip önbelleklenemeyeceğini bildirir • Cache-Control: no-cache • Cache-Control: public • Cache-Control: private • Cache-Control: no-store • Cache-Control: max-age=300 • Cache-Control: public, max-age=31536000
  22. Çerezler (Cookie) • “stateless” HTTP protokolünde istemcinin sunucuya ilettiği kimlik

    bilgisini tutar Tipleri: • Oturum Çerezleri (Session Cookies) • Kalıcı Çerezler (Persistent Cookies)
  23. HTTP Güvenliği • İletim kanalını güvenli hale getirmek için TLS

    kullanılmalıdır (HTTPS) • Çerezler HttpOnly ve SameSite=Strict olarak işaretlenmelidir • XSS (Cross-Site Scripting) ataklarını önlemek için • Çerezler Secure olarak işaretlenmelidir • Böylece güvenli olmayan HTTP isteklerinde çerezler gönderilmez • HSTS (HTTP Strict Transport Security) başlığı kullanılmalıdır • Tarayıcı belirli bir süre boyunca sürekli HTTPS kullanmak üzere tembihlenir • SSL-stripping adlı ataklardan korur
  24. HTTP Performans Ölçümü • Apache ab stres testi için kullanılabilir

    • Apache Jmeter yük ve performans testi için kullanılabilir (gokhansengun.com’da blog bulabilirsiniz) • http://loader.io/ • https://www.blazemeter.com/
  25. HTTP’yi Ölçeklemek • Önbellek sunucuları kullanılabilir • CDN kullanılabilir •

    DNS’in yük dağıtma özelliği kullanılabilir • JS ve CSS paketleri birleştirilip ”minify” edilebilir