top of page

Backend Sunucuları (Backend Servers)

Yazarın fotoğrafı: Songül ÖZÜGÜRLER
Songül ÖZÜGÜRLER
28 Nis
4 dakikada okunur

Back End Sunucuları (Back End Servers)

Bir back-end sunucusu, web uygulamasını çalıştırmak için gerekli olan tüm uygulamaları barındıran, arka taraftaki donanım ve işletim sistemidir. Yani web uygulamasını oluşturan tüm süreçleri çalıştıran ve tüm görevleri yerine getiren gerçek sistemdir. Back-end sunucusu, Data Access Layer (Veri erişim katmanı) içerisinde yer alır.

Yazılım (Software)

Back-end sunucusu, diğer 3 temel back-end bileşenini içerir:

- Web Server (Web Sunucusu)

- Database (Veritabanı)

- Development Framework (Geliştirme Framework’ü)

Backend Sunucuları (Backend Servers)

(Şema açıklaması: Linux veya Windows çalışan bir back-end sunucusunun; Apache, NGINX veya IIS gibi web sunucularına; PHP, C#, Java gibi web uygulamalarına; MySQL, MS SQL veya Oracle gibi veritabanlarına bağlı olduğunu gösteren diyagram.)

Back-end sunucuda bulunan diğer yazılım bileşenleri şunları da içerebilir:

- Hypervisor’lar (sanallaştırma katmanı)

- Container’lar (Docker vb.)

- WAF (Web Application Firewall)

Back-End “Stack” Kombinasyonları

Back-end sunucular için popüler birçok “stack” (yığın) kombinasyonu vardır. Bunlar belirli bir back-end bileşen setini içerir.

Yaygın örnekler:

KombinasyonBileşenler LAMP Linux, Apache, MySQL, PHP WAMP Windows, Apache, MySQL, PHP WINS Windows, IIS, .NET, SQL Server MAMP macOS, Apache, MySQL, PHP XAMPP Cross-Platform, Apache, MySQL, PHP/PERL

Ayrıca web çözüm stack’lerinin kapsamlı bir listesi bu makalede bulunabilir.

Donanım (Hardware)

Back-end sunucusu, web uygulamasını çalıştırmak için gerekli tüm donanımı içerir. Bu donanımın gücü ve performans kapasitesi, web uygulamasının ne kadar stabil ve hızlı olacağını belirler.

Daha önce mimari (Architecture) bölümünde de konuştuğumuz gibi, özellikle büyük web uygulamalarında mimari genellikle yükü birden fazla back-end sunucuya dağıtacak şekilde tasarlanır. Bu sunucular birlikte çalışarak aynı görevleri gerçekleştirir ve web uygulamasını son kullanıcıya ulaştırır.

Web uygulamaları her zaman tek bir back-end sunucu üzerinde çalışmak zorunda değildir. Bunun yerine:

veri merkezleri (data centers)

bulut servisleri (cloud hosting)

kullanılabilir ve web uygulaması için sanal host’lar (virtual hosts) sağlanabilir.

Tabii Songül 😄 Aşağıdaki metin, gönderdiğin “Web Servers” bölümünün Türkçe çevirisidir (anlamı koruyup akıcı çevirdim):

Web Sunucuları (Web Servers)

Web sunucusu, back-end sunucu üzerinde çalışan bir uygulamadır. Client-side (istemci tarafı) tarayıcıdan gelen tüm HTTP trafiğini yönetir, istenen sayfalara yönlendirir ve en sonunda tarayıcıya yanıt döner. Web sunucuları genellikle TCP 80 veya 443 portlarında çalışır. Son kullanıcıları web uygulamasının farklı bölümlerine bağlamaktan ve çeşitli yanıtları (response) yönetmekten sorumludur.

İşleyiş (Workflow)

Tipik bir web sunucusu, istemciden HTTP istekleri (request) alır ve farklı HTTP yanıtları ile durum kodları (status codes) döndürür. Örneğin:

- Başarılı isteklerde 200 OK

- Var olmayan sayfalar istendiğinde 404 Not Found

- Yetkisi olmayan sayfalara erişim istendiğinde 403 Forbidden

- vb.

- (Şema açıklaması: Bir web sunucusunun telefon, laptop ve monitör gibi üç farklı istemciden gelen istekleri alıp yanıt döndürdüğünü gösteren diyagram.)

Yaygın HTTP Yanıt Kodları

Aşağıdakiler en yaygın HTTP response kodlarından bazılarıdır:

Başarılı Yanıtlar

- 200 OK : İstek başarılı oldu.

Yönlendirme Mesajları

- 301 Moved Permanently : İstenen kaynağın URL’si kalıcı olarak değişti.

- 302 Found : İstenen kaynağın URL’si geçici olarak değişti.

İstemci Hata Yanıtları

- 400 Bad Request : Geçersiz sözdizimi nedeniyle sunucu isteği anlayamadı.

- 401 Unauthorized : Kimlik doğrulaması yapılmadan sayfaya erişim denemesi.

- 403 Forbidden : İstemcinin içeriğe erişim hakkı yok.

- 404 Not Found : Sunucu istenen kaynağı bulamıyor.

- 405 Method Not Allowed : İstek yöntemi sunucu tarafından biliniyor ama devre dışı bırakılmış, kullanılamaz.

- 408 Request Timeout : Bazı sunucular, istemciden daha önce istek gelmese bile boşta kalan bağlantıda bu yanıtı gönderebilir.

Sunucu Hata Yanıtları

- 500 Internal Server Error : Sunucu nasıl işleyeceğini bilmediği bir durumla karşılaştı.

- 502 Bad Gateway : Sunucu, gateway olarak çalışırken gerekli yanıtı almak için gittiği yerden geçersiz yanıt aldı.

- 504 Gateway Timeout : Sunucu gateway olarak çalışıyor ve zamanında yanıt alamıyor.

Web Sunucusu Neyi “Taşır”?

Web sunucuları HTTP istekleri içerisinde farklı türde kullanıcı girdisi alabilir:

- metin

- JSON

- ikili veri (binary) (ör: dosya yükleme)

Web sunucusu bir isteği aldıktan sonra:

- isteği hedefe yönlendirir

- gereken işlemleri çalıştırır

- yanıtı client-side’daki kullanıcıya döndürür

Web sunucusunun işleyip trafiği yönlendirdiği sayfalar ve dosyalar, web uygulamasının çekirdek dosyalarıdır.

cURL ile Örnek İstek

Linux terminalinde cURL ile bir sayfa isteyip, -I parametresiyle sadece header’ları görmek:

curl -I https://academy.hackthebox.com

Örnek response:

HTTP/2 200
date: Tue, 15 Dec 2020 19:54:29 GMT
content-type: text/html; charset=UTF-8
...SNIP...

Bu komut örneği header’ları gösterirken, aşağıdaki komut web sayfasının kaynak kodunu (HTML) gösterir:

curl https://academy.hackthebox.com

Web Sunucusu Türleri

Web uygulamalarını çalıştırmak için birçok web sunucusu türü kullanılabilir. Çoğu karmaşık HTTP isteklerini yönetebilir ve genelde ücretsizdir. Hatta Python, JavaScript, PHP gibi dillerle kendi basit web sunucumuzu bile geliştirebiliriz.

Ama pratikte her dil/ekosistem için yüksek trafik altında optimize edilmiş popüler çözümler vardır. Bu da sıfırdan web server yazmak yerine hazır olanı kullanarak zaman kazandırır.

Apache

Apache (ya da httpd ), internette en yaygın web sunucusudur ve internet sitelerinin %40’ından fazlasını barındırdığı belirtilir. Apache çoğu Linux dağıtımında hazır gelir; ayrıca Windows ve macOS sunuculara da kurulabilir.

Apache genellikle PHP ile kullanılır ama şu dilleri de destekler:

- .NET

- Python

- Perl

- CGI üzerinden Bash gibi OS dilleri

Apache’in işlevi modüllerle genişletilebilir. Örneğin PHP dosyalarını servis etmek için:

- back-end sunucuya PHP kurulmalı

- ayrıca Apache için mod_php modülü eklenmelidir

Apache açık kaynak bir projedir; topluluk kaynak koduna erişebilir, hataları düzeltebilir ve zafiyetleri inceleyebilir. Düzenli olarak güncellenir ve iyi dokümantasyona sahiptir. Genelde startup’lar ve küçük şirketlerde çok tercih edilir; ancak büyük şirketler de kullanır. Örnek:

- Apple

- Adobe

- Baidu

Backend Sunucuları (Backend Servers)

NGINX

NGINX internette en yaygın ikinci web sunucusudur; internet sitelerinin yaklaşık %30’unu barındırdığı belirtilir.

NGINX’in odağı: aynı anda çok sayıda isteği, düşük CPU ve RAM tüketimiyle karşılamak. Bunu asenkron (async) mimariyle başarır. Bu yüzden yüksek trafik alan sitelerde çok güvenilir bir tercihtir; en yoğun trafiğe sahip ilk 100.000 sitenin yaklaşık %60’ının NGINX kullandığı söylenir.

NGINX de ücretsiz ve açık kaynaktır; bu da güvenlik ve sürdürülebilirlik açısından avantaj sağlar. Kullanan popüler örnekler:

- Google

- Facebook

- Twitter

- Cisco

- Intel

- Netflix

- HackTheBox

IIS

IIS (Internet Information Services), internette üçüncü en yaygın web sunucusudur; internet sitelerinin yaklaşık %15’ini barındırdığı belirtilir.

Microsoft tarafından geliştirilir ve çoğunlukla Windows Server üzerinde çalışır. Genelde Microsoft .NET framework’ü ile geliştirilen uygulamaları barındırmak için kullanılır ama PHP gibi diğer dillerdeki uygulamaları da host edebilir. Ayrıca FTP gibi servisleri de barındırabilir.

IIS’in güçlü taraflarından biri Active Directory entegrasyonudur. Örneğin Windows Auth gibi özelliklerle, kullanıcılar Active Directory üzerinden doğrulanıp web uygulamalarına otomatik giriş yapabilir.

IIS en popüler web sunucusu olmasa da büyük kurumlarda yaygındır; özellikle altyapısında Windows Server ve Active Directory ağır basan yapılarda. Örnek:

- Microsoft

- Office365

- Skype

- Stack Overflow

- Dell

Diğer Web Sunucuları

Bu üçlünün dışında da yaygın web sunucuları vardır. Örneğin:

- Java tabanlı uygulamalar için Apache Tomcat

- Back-end’i JavaScript olan uygulamalar için Node.js

 
 
bottom of page