Teknoloji Pazarlama, Bloglarınızdan ve Gadget'larınızdan Para Kazanın

Bana Hosting'ten Modern Bir Web Uygulama Yığını

Bana Hosting'ten Modern Bir Web Uygulama Yığını

Modern web uygulamaları büyük, karmaşık ve kaynak yoğundur. Sonuç olarak bu uygulamaları barındırma yöntemleri büyük ölçüde değişti. Modern bir web uygulamasını Linux/Apache/MySQL/PHP (LAMP) yığınında barındırmak artık ideal değil çünkü bunu yapmak, modern web uygulamalarının performans yeteneklerini ciddi şekilde sınırlayacaktır.

Web uygulaması yığını, modern, güvenli ve hızlı uygulama sunumu sağlamak için birlikte çalışan bir yazılım koleksiyonudur. Bu modern uygulama yığınları, tipik bir LAMP yığınının ötesine geçer ve Nginx ve Varnish gibi ek bileşenleri içerir. Kapsamlı ayarlama, en iyi son kullanıcı deneyimi için bu bileşenlerin birlikte çalışmasını sağlar.

Bu makale, Bana Hosting Cloud web uygulama yığınımızı oluşturan farklı uygulamaları ve teknolojileri kapsamakta ve özellikle uygulama dağıtımına odaklanmaktadır.

Bana Hosting Stack'i keşfedin

Nginx

Nginx, web uygulama yığınımızda ters proxy olarak kullandığımız tam özellikli, yüksek performanslı bir web sunucusudur. Birçok web sitesi tarafından tercih edilen Nginx, statik içerik sunma konusunda üstün olduğu için Apache Web Sunucusunun popüler bir alternatifi olmuştur.

Nginx, iyileştirilmiş nesne önbelleğe alma, TLS Sonlandırma ve HTTP/2 Desteği ile statik içerik sunmayı kolay hale getirir.

Bunu aklımızda tutarak uygulama yığınımızda Nginx'i Apache web sunucusuyla birlikte kullanıyoruz. Nginx'in Apache'nin önünde ters proxy olarak kullanılması, her birinin kendi güçlü yönlerine odaklanmasına olanak tanır.

Nesne Önbelleğe Alma

Nginx, mikro önbellek adı verilen yerleşik bir önbellek içerir. Mikro önbellek birçok potansiyel uygulamaya sahip olsa da, önbelleğe almayı resimler, CSS şablonları, JavaScript ve diğer küçük dosyalar gibi küçük statik nesnelere odaklıyoruz.

Önbelleğe alınmış nesneler, her istekte nesnenin web sunucusundan alınması ihtiyacını önlediğinden, bu durum trafiğin düşük ve trafiğin yüksek olduğu sitelere yarar sağlar. Birçok modern CMS, sayfa yüklemesi başına 100'den fazla statik nesneye sahip olabilir ve bunların tümü Nginx mikro önbelleği tarafından sunulabilir. Bu, web trafiğinin en yoğun olduğu zamanlarda, dinamik içerik web sunucusundaki önemli yükü belirgin şekilde ortadan kaldırır.

TLS Sonlandırma

TLS sonlandırıcıları, HTTPS bağlantılarının şifresinin çözülmesini yönetir. Genellikle web sunucusu uygulaması TLS şifre çözme işlemini gerçekleştirir, ancak bu çoğu zaman ideal değildir. Varnish ve diğer önbelleğe alma proxy'leri şu anda HTTPS bağlantılarını desteklememektedir ve bu nedenle, önbelleğe alma katmanınıza ulaşmadan önce TLS bağlantılarının şifresinin çözülmesini gerektirir. Yük dengeli çözümler ayrıca, TLS sonlandırıcı kullanılmadığında her uygulama sunucusuna TLS sertifikasının yüklenmesini gerektirir.

Bu sınırlamalara bir çözüm, Nginx'in TLS şifre çözme işlemini gerçekleştirmesine izin vermektir. Pound ve HAProxy gibi alternatifler mevcut olsa da, Nginx bunu yerel olarak yönetir ve gerekirse yük dengeleme de sağlayarak ek yük dengeleyici hizmetlerine olan ihtiyacı ortadan kaldırır.

Modern TLS Desteği

Aktarım Katmanı Güvenliği (TLS), eski şifreleme protokolü olan Güvenli Yuva Katmanı'nın (SSL) devamıdır. TLS, neredeyse tüm modern web siteleri için bir gereklilik olan HTTPS bağlantıları için şifreleme sağlar.

Okumak:  Magento 2 Uzantısını Herhangi Bir Şey Olmadan Kurmanın Yolları...

Mevcut güvenlik standartları (en önemlisi PCI DSS), eski SSL'yi ve hatta bazı eski TLS'yi yetersiz olarak işaretlemiştir ve yalnızca modern TLS şifreleri, bu gelişen standartları karşılamayı mümkün kılmaktadır.

SSL gibi TLS'nin de çeşitli sürümleri vardır; en yenisi TLS 1.3'tür. PCI uyumlu bir barındırma sağlayıcısı olarak yalnızca Mozilla Modern standartlarına uygun güvenli şifreleri etkinleştiriyoruz.

HTTP/2 Desteği

Nginx, en son HTTP/2 protokolünü tamamen destekler. HTTP/2, 1999'da piyasaya sürülen orijinal HTTP 1.1 protokolünün revizyonudur. Geliştirilmiş performansa, algılanan son kullanıcı gecikmesine ve web sunucuları ile tarayıcılar arasında çok katlı bağlantı kullanımına odaklanır. HTTP/2 şu anda tüm önemli tarayıcılar tarafından desteklenmektedir ve Bana Hosting Cloud çözümlerinde Nginx'te varsayılan olarak etkindir.

Nginx'in ayrıca yeni QUIC – HTTP/3 protokolünü destekleme planları da var ve kullanılabilir olur olmaz biz de destekleyeceğiz.

İçerik Sıkıştırma

Veri sıkıştırma yeni bir fikir değil. Site verileri sunucuda hızlı bir şekilde sıkıştırılabilir ve tarayıcıda sıkıştırılamazsa, bu, aktarılan verilerin boyutunu azaltır ve böylece zamandan tasarruf sağlar.

Web sunucuları ve tarayıcıları yıllardır gzip ve deflate gibi çeşitli sıkıştırma algoritmalarını desteklemektedir. Bunların her ikisi de içerik dağıtımı açısından tarihsel olarak iyi çalışmış olsa da, modern ve daha etkili bir seçenek de mevcuttur: Brotli.

Gzip gibi sıkıştırma algoritmaları yıllardır destekleniyor ancak biz daha verimli bir seçeneği destekliyoruz: Brotli.

Brotli, özellikle HTML ve CSS gibi metin tabanlı web uygulaması statik dosyalarının aktarımı için tasarlanmış sözlük tabanlı bir sıkıştırma algoritması kullanan bir veri spesifikasyonudur. Uzmanlaşmış rolü nedeniyle hem sıkıştırma oranı hem de sıkıştırma hızı açısından diğer yaygın web sıkıştırma algoritmalarına göre önemli yükseltmeler sunar. Artık tüm modern tarayıcılar ve web sunucuları, yapılandırmamızda etkin olan Nginx dahil Brotli'yi desteklemektedir.

Apaçi

Apache, ilk kez 1995 yılında gün yüzüne çıkan, endüstri standardında bir açık kaynak web sunucusudur. 2012 yılında, sürüm 2.4'ün piyasaya sürülmesiyle, bugüne kadar gelişmeye devam eden önemli bir özellik seti desteklenmeye başlandı.

Apache'nin güçlü yönlerinden biri, FastCGI Process Manager (FPM) gibi çeşitli uygulama arayüzleri aracılığıyla dinamik içeriği yüksek eşzamanlılıklarda sunma yeteneğidir. Bulut uygulama yığınımızdaki tüm PHP tabanlı uygulamalar için PHP-FPM kullanıyoruz. Hızlı dinamik uygulama desteğinin ötesinde Apache 2.4'ün aşağıda açıklandığı gibi başka birçok önemli özelliği vardır.

Etkinlik MPM'si

Apache 2.4, önceki sürümlerin önceki prefork ve çalışan MPM'lerine göre önemli performans kazanımları sağlayan olay çoklu işlem modülünün (MPM) piyasaya sürüldüğünü gördü. MPM olayı Apache'yi bellek kullanımı açısından çok daha verimli hale getirir ve Nginx'e benzer şekilde gelen bağlantılar için iş parçacığı işlemeyi artırır. Bana Hosting Cloud planları, uygulama yığınımızın bir parçası olarak dikkatle ayarlanmış bir olay MPM yapılandırmasını kullanır.

Web Uygulaması Güvenlik Duvarı

Web uygulaması güvenlik duvarı (WAF), herhangi bir web sitesi için önemli bir güvenlik özelliğidir. Amaçları, diğerlerinin yanı sıra SQL enjeksiyonu, siteler arası komut dosyası oluşturma ve sahte istekler dahil olmak üzere yaygın güvenlik açıklarına yönelik bir HTTP içerik filtresi sağlamaktır. WAF'ler aynı zamanda bilinen uygulama açıklarına ve arka kapılara karşı da koruma sağlayarak bilinen uzak kabukları ve düzeltme eki uygulanmamış yazılımları kötüye kullanıma karşı korur.

Okumak:  Şu Anda Piyasadaki En İyi BigCommerce WordPress Temaları

Uygulama yığınımız, uygulama koruması için açık kaynaklı bir WAF olan ModSecurity'yi kullanır. ModSecurity'nin Apache ile birlikte kullanılması, web uygulamalarına ek koruma sağlar ve PCI DSS gibi güvenlik ve uyumluluk gereksinimlerinin karşılanmasına yardımcı olur.

İçerik Optimizasyonu

Google tarafından oluşturulan Mod_Pagespeed, sunucudaki içeriği optimize etmek ve site yükleme sürelerini azaltmak için tasarlanmış açık kaynaklı bir modüldür. Bu modül, HTML, JavaScript, CSS ve resimler de dahil olmak üzere statik içerikte bir dizi ön uç optimizasyonu gerçekleştirir. Bu optimizasyonlar, bu dosyaların boyutunu ve toplam istek sayısını azaltan statik kod satır içi oluşturma, birleştirme ve küçültme işlemlerini içerir.

Ön uç optimizasyonları site geliştirme için akıllıcadır, ancak zaman kısıtlamaları çoğu zaman bunların bir kenara itilmesine neden olur. İşte o zaman Mod_Pagespeed paha biçilmez hale gelir.

Ön uç optimizasyonları site geliştirme için akıllıca olsa da, zaman kısıtlamaları bazen bunları bir kenara iter. Bu durumlarda Mod_Pagespeed çok değerlidir.

Mod_Pagespeed hem Nginx hem de Apache için mevcut olsa da, bunu Apache web sunucusuyla etkinleştirdik. Bu, daha sonra Nginx mikro önbelleğinde en iyi şekilde önbelleğe alınabildiğinde, kodu Apache'nin bir parçası olarak optimize etmesine olanak tanır.

Uygulama Uyumluluğu

Daha önce de belirtildiği gibi, herhangi bir web uygulaması Nginx veya Apache altında yapılandırılabilir, ancak ikincisinin .htaccess desteği bazen Apache'yi daha uygun bir aday haline getirir. Bazı CMS'ler, Nginx tarafından tam olarak desteklenmeyen .htaccess yapılandırmalarını kullanır. .htaccess dosyalarını bir bütün olarak kullanmanın artıları ve eksileri olsa da, müşterilerimizi sitelerini Nginx standartlarına göre değiştirmeye zorlamak yerine genellikle bunları kullanılabilir hale getirmek tercih edilir.

Vernik

Varnish, yüksek performanslı statik ve dinamik içerik sunumu sağlayan bir önbellekleme HTTP hızlandırıcısıdır. Etkinleştirildiğinde ve düzgün şekilde yapılandırıldığında, normalde Apache ve Nginx tarafından işlenen içerik istekleri artık önbelleğe alınmış varlıkları doğrudan bellekten kullanıcıların tarayıcılarına ileten Varnish tarafından işleniyor. Önemli miktarda PHP yorumu gerektiren (Magento gibi) karmaşık arka uçlara sahip dinamik siteler, Varnish kullanımından büyük ölçüde yararlanabilir.

PHP yorumuna dayanan dinamik bir site çalıştırıyorsanız (Magento, WordPress, WooCommerce ve daha fazlası) Varnish, kullanıcılar için yükleme sürelerini büyük ölçüde iyileştirebilir.

Vernik'in bir dezavantajı uygulamadaki karmaşıklığıdır. Hangi içeriğin önbelleğe alınacağını kontrol etmek, özellikle dinamik içerik söz konusu olduğunda zor olabilir. Alışveriş sepetlerinin düzgün şekilde güncellenmesini sağlamak için oturum tabanlı e-Ticaret siteleriyle uğraşırken ekstra dikkatli olunmalıdır. Varnish, bu yapılandırmaları Varnish Yapılandırma Dilini (VCL) kullanarak yönetir. VCL, web siteleri için özelleştirilebilir ve Magento 2 gibi bazı uygulamalar, uygulamayı çalışır hale getirmek için temel bir VCL dosyası sağlar.

Şu anda Varnish, HTTPS'yi değil yalnızca HTTP protokolünü desteklemektedir. Bu, web uygulama yığınımızda Nginx tarafından işlenen Varnish'in önünde bir SSL sonlandırıcının kullanılmasını gerektirir.

PHP – Yazılım Koleksiyonları

Web uygulama yığınımız, uygulama dili desteği için RedHat'ın Yazılım Koleksiyonlarını (SCL) kullanır. SCL, PHP, Ruby ve Node.js gibi birden fazla dilin ve sürümün herhangi bir site için hemen kullanılabilir olmasına olanak tanır. SCL ayrıca dil sürümleri arasında geçiş yapmayı da kolaylaştırır. Örnek olarak, müşterilerimiz herhangi bir hesap için PHP sürümlerini Müşteri Portallarından 5.6 ile 7.4 arasındaki herhangi bir sürüme ayarlayabilirler.

Okumak:  En İyi Note 20 İncelemesi ve Karşılaştırma: Türkçe Yazılım ve Performans Analizi 2021

PHP Opcache

Opcache, önceden derlenmiş komut dosyası bayt kodunu paylaşılan bellekte optimize ederek ve depolayarak performansı artıran bir PHP önbellekleme hızlandırıcısıdır. Düzgün ayarlanmış bir Opcache örneğinin PHP ile entegrasyonu, sık kullanılan komut dosyalarının yoğun derleme sürecini atlayarak doğrudan bellekten okunmasına olanak tanır. Bu, çoğu uygulama için yükleme sürelerini önemli ölçüde azaltmıştır.

Opcache, PHP'nin modern sürümlerine ve 7.4'ün en son sürümüne dahil edilmiştir ve eAccelerator ve APC gibi eski PHP komut dosyası önbelleğe alma yöntemlerinin yerini almıştır. Opcache'in faydalarını tam olarak gerçekleştirmek için, uygulama yığınımız içindeki Opcache varsayılan değişkenlerini ayarlamak için önemli ölçüde zaman harcadık. Varsayılan Opcache yapılandırmasını barındırılan uygulamanın boyutuna göre ayarlamayı ihmal etmek, performans kazanımlarını boşa çıkarabileceğinden, bu sıklıkla gözden kaçırılır ancak yine de kritik öneme sahiptir.

CDN

Uygulama yığınımızın yerel bir parçası olmasa da neredeyse her web sitesi içerik dağıtım ağı (CDN) kullanmanın faydasını görecektir. Bir CDN, dünya çapındaki sunucularda sık kullanılan statik içeriği önbelleğe alır, böylece kullanıcıların tarayıcılarına site içeriğini almak ve gecikmeyi azaltmak için yerel bir seçenek sunar. Bulut çözümlerimizle CDN çözümü sunuyoruz ve kullanılmasını şiddetle tavsiye ediyoruz.

Hepsini Bir Araya Bağlamak

Modern web uygulamaları devasadır ve en iyi performans için önemli sistem gereksinimlerine sahiptir. Bir uygulamayı basit bir Apache veya Nginx örneğinde barındırmak mümkün olsa da, kolaylık sağlamak için performanstan ödün verir. Apache, Nginx ve Varnish'in birbirini tamamlayan güçlü yönleri vardır ve bunları birlikte kullanmak performans ve ölçeklenebilirlik açısından en iyi sonuçları verir.

Uygulama yığınımız karmaşık olsa da, bu sistemleri kullanan yirmi yıllık deneyimle tasarlanmış ve çeşitli uygulamalar için test edilmiş ve ayarlanmıştır. Aynı zamanda sürekli gelişmektedir. Uygulama yığınımızın ilgili bileşenleri için yeni teknoloji ve özellikler kullanıma sunuldukça, bu yeni öğeleri kullanıma sunmadan önce test ediyoruz.

Bu hususlardan ilki, farklı hizmetlerde kullanılan ve her birinin dikkatli bir şekilde yönetilmesi gereken çeşitli başlıklardır. Nginx, Apace ve Varnish'in her biri içerik kontrolü, önbellek kontrolü ve hata ayıklama bilgileri için varsayılan ve özel başlıklar sağlar. Harici CDN veya hızlandırıcı hizmetlerinden gelen başlıklar bunu daha da karmaşık hale getirebilir. Başlıkların doğru şekilde yapılandırılması, önbelleğe alma işleminin doğru şekilde yerleştirilmesini sağlar ve yığın boyunca veri akışını kolaylaştırır.

Günlüğe kaydetme, hem hata ayıklama hem de uyumluluk gereksinimleri açısından da zorluk teşkil eder. Yığındaki her hizmet, bu çeşitli bileşenler aracılığıyla her isteğin ve yanıtın izlenmesini kolaylaştırmak için hepsinin güvenli bir uzak konumda saklanması gereken bir günlük oluşturur.

İş parçacığı, bağlantı sınırları ve kaynak kullanımı da dikkate alınmalıdır. Bu uygulama yığınındaki herhangi bir bileşen, uygun şekilde ayarlanmadığı takdirde darboğaz oluşturabilir. Bu yapılandırmaların çoğu, Magento 2 Optimizasyonunun Kesin Kılavuzu adlı makalemizde özetlenmiştir.