- Konu sahibi
- #1
Web sunucusu, istemciden gelen HTTP/HTTPS isteklerini karşılayıp statik içerikleri doğrudan sunan ve gerektiğinde isteği başka bir bileşene aktaran sunucudur. Uygulama sunucusu ise iş kurallarını çalıştırır; veritabanı sorguları, oturum yönetimi, doğrulama ve dinamik sayfa üretimi gibi işlemleri yürütür. Kısaca web sunucusu çoğunlukla isteğin giriş ve dağıtım katmanı, uygulama sunucusu ise uygulamanın çalıştığı katmandır.
Bir ziyaretçi
Bu iki rol aynı makinede bulunabilir; ancak görevleri yine de farklıdır. Küçük bir uygulamada tek işlem hem HTTP isteklerini kabul edip hem de uygulamayı çalıştırabilir. Trafik veya bakım ihtiyacı arttığında roller ayrı süreçlere, hatta ayrı sunuculara bölünebilir.
Bir e-ticaret sitesinde ürün görseli, CSS dosyası veya indirilebilir bir dosya statik içeriktir. Herkese açık statik dosyalar uygulama çalışmadan sunulabilir. Yetki gerektiren özel indirmeleri ise yalnız uzantısı statik diye doğrudan açmayın; erişim kontrolü ayrıca uygulanır. Buna karşılık sepete ürün ekleme isteği; kullanıcının oturumunu, stok durumunu ve sipariş kurallarını kontrol eder. Bu iş uygulama sunucusunun görevidir. Uygulama sunucusu gerektiğinde veritabanından bilgi alır ve sonucu web sunucusuna döndürür.
Basitleştirilmiş mimari şu şekildedir:
Aşağıdaki karşılaştırma, hangi bileşenin hangi işi üstlendiğini ayırmaya yardımcı olur.
PHP-FPM HTTP sunucusu değil, webserver ile FastCGI üzerinden konuşan PHP süreç yöneticisidir; Nginx/Apache HTTP ön katmanı bu protokolle bağlanabilir. Node.js HTTP sunucusu veya Java servlet container gibi örnekler HTTP ile uygulama işini aynı süreçte birleştirebilir. Bu yüzden tüm mimariler mutlaka iki ayrı makine gerektirmez.
Yalnızca statik bir tanıtım sitesi, dokümantasyon veya dosya sunumu yapıyorsanız web sunucusu tek başına yeterli olabilir. PHP, Python, Java, Node.js veya benzeri bir çalışma ortamı kullanan dinamik bir site için uygulama sunucusu ya da ilgili uygulama çalışma süreci gerekir. Web sunucusu bu uygulamanın önünde ters vekil olarak konumlandırılabilir.
Uygulama sunucusunu doğrudan internete açmak her zaman gerekli değildir. Yaygın yerleşimde dış istekleri web sunucusu alır; uygulama sunucusu yalnızca yerel ağdan veya aynı makinedeki güvenli bir bağlantıdan erişilebilir. Böylece statik içerik, TLS, alan adı yönlendirmesi ve temel trafik kontrolü web sunucusunda; uygulama mantığı ise uygulama sunucusunda tutulur.
Sorun giderirken önce isteğin hangi katmanda başarısız olduğunu ayırın: Statik dosya da açılmıyorsa web sunucusu, alan adı veya dosya erişimi incelenir. Statik içerik çalışıyor ancak dinamik istek hata veriyorsa uygulama süreci, uygulama günlükleri, bağlantı ayarları veya veritabanı incelenir. Web sunucusunun başarıyla çalışması, uygulama sunucusunun da sağlıklı olduğu anlamına gelmez.
Nasıl çalışırlar?
Bir ziyaretçi
example.com/urun/42 adresine girdiğinde istek genellikle şu akıştan geçer:- Web sunucusu bağlantıyı kabul eder, TLS işlemini ve temel HTTP kontrollerini yürütür.
- İstenen dosya bir görsel, CSS veya JavaScript dosyasıysa dosyayı doğrudan gönderir.
- İstek dinamik bir işlem gerektiriyorsa, örneğin ürün bilgisi veya kullanıcı hesabı gerekiyorsa, uygulama sunucusuna iletir.
- Uygulama sunucusu isteği yorumlar, gerekli iş kurallarını çalıştırır, veritabanına erişir ve yanıtı oluşturur.
- Web sunucusu uygulamadan gelen yanıtı istemciye iletir; gerekirse önbellekleme, sıkıştırma veya erişim günlüğü işlemlerini uygular.
Bu iki rol aynı makinede bulunabilir; ancak görevleri yine de farklıdır. Küçük bir uygulamada tek işlem hem HTTP isteklerini kabul edip hem de uygulamayı çalıştırabilir. Trafik veya bakım ihtiyacı arttığında roller ayrı süreçlere, hatta ayrı sunuculara bölünebilir.
Somut örnek
Bir e-ticaret sitesinde ürün görseli, CSS dosyası veya indirilebilir bir dosya statik içeriktir. Herkese açık statik dosyalar uygulama çalışmadan sunulabilir. Yetki gerektiren özel indirmeleri ise yalnız uzantısı statik diye doğrudan açmayın; erişim kontrolü ayrıca uygulanır. Buna karşılık sepete ürün ekleme isteği; kullanıcının oturumunu, stok durumunu ve sipariş kurallarını kontrol eder. Bu iş uygulama sunucusunun görevidir. Uygulama sunucusu gerektiğinde veritabanından bilgi alır ve sonucu web sunucusuna döndürür.
Basitleştirilmiş mimari şu şekildedir:
Kod:
Kullanıcı
|
v
Web sunucusu
|-- statik dosya -> doğrudan yanıt
|
`-- dinamik istek -> Uygulama sunucusu -> Veritabanı
Aşağıdaki karşılaştırma, hangi bileşenin hangi işi üstlendiğini ayırmaya yardımcı olur.
| Konu | Web sunucusu | Uygulama sunucusu |
|---|---|---|
| Temel görev | HTTP isteklerini karşılamak ve içerik sunmak | Uygulama kodunu ve iş kurallarını çalıştırmak |
| Tipik içerik | HTML, CSS, JavaScript, görsel ve dosyalar | Dinamik yanıt, API sonucu ve işlem çıktısı |
| Veritabanı ihtiyacı | Genellikle doğrudan gerekmez | Uygulama gerektiriyorsa erişir |
| Örnek görev | Statik dosyayı önbellekten sunmak | Sepete ürün ekleme işlemini doğrulamak |
PHP-FPM HTTP sunucusu değil, webserver ile FastCGI üzerinden konuşan PHP süreç yöneticisidir; Nginx/Apache HTTP ön katmanı bu protokolle bağlanabilir. Node.js HTTP sunucusu veya Java servlet container gibi örnekler HTTP ile uygulama işini aynı süreçte birleştirebilir. Bu yüzden tüm mimariler mutlaka iki ayrı makine gerektirmez.
Hangisini kullanmalısınız?
Yalnızca statik bir tanıtım sitesi, dokümantasyon veya dosya sunumu yapıyorsanız web sunucusu tek başına yeterli olabilir. PHP, Python, Java, Node.js veya benzeri bir çalışma ortamı kullanan dinamik bir site için uygulama sunucusu ya da ilgili uygulama çalışma süreci gerekir. Web sunucusu bu uygulamanın önünde ters vekil olarak konumlandırılabilir.
Uygulama sunucusunu doğrudan internete açmak her zaman gerekli değildir. Yaygın yerleşimde dış istekleri web sunucusu alır; uygulama sunucusu yalnızca yerel ağdan veya aynı makinedeki güvenli bir bağlantıdan erişilebilir. Böylece statik içerik, TLS, alan adı yönlendirmesi ve temel trafik kontrolü web sunucusunda; uygulama mantığı ise uygulama sunucusunda tutulur.
Sorun giderirken önce isteğin hangi katmanda başarısız olduğunu ayırın: Statik dosya da açılmıyorsa web sunucusu, alan adı veya dosya erişimi incelenir. Statik içerik çalışıyor ancak dinamik istek hata veriyorsa uygulama süreci, uygulama günlükleri, bağlantı ayarları veya veritabanı incelenir. Web sunucusunun başarıyla çalışması, uygulama sunucusunun da sağlıklı olduğu anlamına gelmez.
Sık yapılan hatalar
- Web sunucusunu uygulama kodunu çalıştıran bileşen sanmak: Bu bir rol ayrımıdır; Apache mod_php veya entegre çalışma ortamları uygulama kodunu aynı süreçte çalıştırabilir. Webserver adı bir ürünün yalnız statik içerikle sınırlı olduğunu göstermez.
- Her isteği uygulama sunucusuna göndermek: Statik dosyaları doğrudan sunmak gereksiz işlem yükünü azaltabilir.
- Uygulama sunucusunu yalnızca port numarasıyla değerlendirmek: Asıl ayrım porttan çok, HTTP isteğini kimin kabul ettiği ve iş mantığını kimin çalıştırdığıdır.
- Katmanlardan birinin günlüklerini kontrol etmemek: Hatanın web sunucusunda mı, uygulama sürecinde mi olduğunu anlamak için her iki katmanın kayıtları karşılaştırılmalıdır.