Ana içeriğe geç

Yan yana

Web SunucusuvsUygulama Sunucusu

Web sunucusu ile uygulama sunucusu arasındaki fark nedir?

Güncellendi 3 dk okuma6 fark

Kısaca

Web sunucusu HTTP bağlantılarını yönetir ve statik dosyaları sunar; uygulama sunucusu ise genellikle onun ardında kodunuzu çalıştırıp dinamik yanıtlar üretir.

Web Sunucusu

Web sunucusu, tarayıcılardan ve diğer istemcilerden gelen HTTP isteklerini alıp sayfa, dosya ya da veriyle yanıt veren yazılım veya onu çalıştıran makinedir.

Web Sunucusu sayfasını oku

Uygulama Sunucusu

Uygulama sunucusu, uygulamanın kodunu ve iş mantığını çalıştırıp istekleri dinamik yanıtlara çeviren, çoğu zaman bir web sunucusunun ardında duran yazılımdır.

Uygulama Sunucusu sayfasını oku

Web Sunucusu ve Uygulama Sunucusu karşılaştırması

ÖzellikWeb SunucusuUygulama Sunucusu
Asıl işHTTP bağlantılarını kabul etmek, istekleri sunmak ya da iletmekUygulama kodunu ve iş mantığını çalıştırmak
İçerikStatik dosyalar: HTML, CSS, görseller, indirmelerHer istek için üretilen dinamik yanıtlar
Tipik özelliklerTLS, sıkıştırma, önbellek, yönlendirmeler, yük dengelemeWorker havuzları, veritabanı bağlantıları, oturumlar, transaction'lar
KonumKenarda, istemcilere dönükWeb sunucusunun arkasında, ağın içinde
Bir dile bağlı mı?Hayır: her siteyi aynı şekilde sunarEvet: tek bir dil ya da platform için yapılmıştır
ÖrneklerNGINX, Apache HTTP Server, Caddy, IISTomcat, WildFly, Gunicorn, Puma, PHP-FPM, Kestrel

Fark, açıklamalı

Web sunucusu ve uygulama sunucusu, bir isteğin yolu üzerindeki iki roldür. NGINX, Apache HTTP Server ya da Caddy gibi bir web sunucusu HTTP bağlantılarını kabul eder, HTTPS'i sonlandırır, görseller ve stil sayfaları gibi statik dosyaları doğrudan diskten sunar ve geri kalan her şeyi iletir. Gunicorn, Puma, Tomcat ya da Kestrel gibi bir uygulama sunucusu ise uygulamanızın kodunu barındırır ve iş mantığını çalıştırır: her istek için girdiyi denetler, veritabanını sorgular ve yanıtı oluşturur.

Bu ayrım, iki işin farklı güçler gerektirmesinden doğar. Çok sayıda açık bağlantıyı, yavaş istemcileri, sıkıştırmayı ve TLS'i verimli yönetmek uzmanlık isteyen bir iştir; uygulama kodunu çalıştırmak ise worker süreçlerini ya da iş parçacıklarını, veritabanı bağlantı havuzlarını, oturumları ve transaction'ları yönetmekle ilgilidir. İkisini ayrı tutmak her birinin kendi işini iyi yapmasını sağlar; web sunucusu da birkaç uygulama sunucusunu koruyup yükü aralarında dağıtabilir.

Tipik bir kurulumda birlikte çalışırlar: NGINX internete bakar, statik istekleri kendisi yanıtlar ve dinamik olanları uygulama sunucusuna iletir; tıpkı bir restoranın ön tezgâhının hazır ürünleri hemen verip özel siparişleri mutfağa göndermesi gibi. Kurumsal Java'da WildFly ya da WebLogic gibi tam uygulama sunucuları Jakarta EE'yi uygular ve dağıtılan WAR ya da EAR dosyalarını barındırır; diğer ekosistemlerin çoğunda ise uygulama sunucusu, Python için Gunicorn ya da PHP için PHP-FPM gibi tek bir uygulamayı çalıştıran küçük bir süreçtir.

Sık yapılan bir yanlış, aralarındaki çizginin katı olduğunu düşünmektir. Birçok framework kendi içine bir HTTP sunucusu gömer: bir Spring Boot uygulaması içinde Tomcat'le gelir, bir Node.js uygulaması da kendi sunucusunu açar; Tomcat dosya da sunabilir, NGINX de modüller aracılığıyla küçük script'ler çalıştırabilir. Ayrım, her birinin yığındaki asıl işiyle ilgilidir; production'da önde yine de çoğunlukla ayrı bir web sunucusu ya da reverse proxy durur.

Hangisini kullanmalısınız?

Web Sunucusu şu durumlarda doğru seçim:

  • Statik bir site, indirmeler ya da tek sayfalık bir uygulamanın derlenmiş dosyalarını sunuyorsunuz.
  • Servislerinizin önünde TLS sonlandırma, sıkıştırma, önbellek ya da yönlendirmeler gerekiyor.
  • Birkaç uygulama örneğinin, yükü dağıtan tek bir giriş noktasına ihtiyacı var.
  • Uygulamayı yavaş istemcilerden ve doğrudan internet trafiğinden korumak istiyorsunuz.

Uygulama Sunucusu şu durumlarda doğru seçim:

  • Yanıtlar kullanıcıya, veriye ya da iş kurallarına bağlı ve her istek için üretilmeli.
  • Uygulamanız Python, Ruby, PHP, Java ya da .NET ile yazılmış ve onu çalıştıracak bir sürece ihtiyaç duyuyor.
  • Yönetilen worker süreçlerine, veritabanı bağlantı havuzlarına ya da transaction'lara ihtiyacınız var.
  • Bir Jakarta EE uygulamasını WAR ya da EAR dosyası olarak dağıtıyorsunuz.

Dosyaları sunan ve gerisini bir Python uygulama sunucusuna ileten NGINX

Web Sunucusutext
# Web server (NGINX): static files from disk, the rest to the app
server {
  listen 443 ssl;
  server_name shop.example.com;
  location /static/ {
    root /var/www/shop;                 # served straight from disk
  }
  location / {
    proxy_pass http://127.0.0.1:8000;   # forwarded to the app server
  }
}
Uygulama Sunucusutext
# Application server (Gunicorn): runs the Python code
# 4 worker processes, each running the app's logic per request
gunicorn shop.wsgi:application \
  --bind 127.0.0.1:8000 \
  --workers 4

Sık sorulan sorular

NGINX bir web sunucusu mu, uygulama sunucusu mu?

NGINX bir web sunucusu ve reverse proxy'dir. Uygulama kodunuzu kendisi çalıştırmaz; dosyaları sunar ve dinamik istekleri Gunicorn, PHP-FPM ya da bir Node.js süreci gibi bir uygulama sunucusuna iletir.

Node.js'in önünde ayrı bir web sunucusuna ihtiyacım var mı?

Kesin olarak değil, çünkü Node.js'in kendi HTTP sunucusu vardır. Yine de birçok ekip TLS'i, statik dosyaları, sıkıştırmayı ve birden çok uygulama örneğini yönetmek için önüne NGINX, bir yük dengeleyici ya da bir CDN koyar.

Tomcat bir uygulama sunucusu mu?

Genellikle servlet container olarak anılır: Jakarta EE'nin web kısmını uygular ve Java web uygulamalarını çalıştırır. WildFly gibi tam uygulama sunucuları ise mesajlaşma ve dağıtık transaction'lar gibi platformun geri kalanını ekler.

Daha fazla

Ayarlar