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ı okuUygulama 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ı okuWeb Sunucusu ve Uygulama Sunucusu karşılaştırması
| Özellik | Web Sunucusu | Uygulama Sunucusu |
|---|---|---|
| Asıl iş | HTTP bağlantılarını kabul etmek, istekleri sunmak ya da iletmek | Uygulama kodunu ve iş mantığını çalıştırmak |
| İçerik | Statik dosyalar: HTML, CSS, görseller, indirmeler | Her istek için üretilen dinamik yanıtlar |
| Tipik özellikler | TLS, sıkıştırma, önbellek, yönlendirmeler, yük dengeleme | Worker havuzları, veritabanı bağlantıları, oturumlar, transaction'lar |
| Konum | Kenarda, istemcilere dönük | Web sunucusunun arkasında, ağın içinde |
| Bir dile bağlı mı? | Hayır: her siteyi aynı şekilde sunar | Evet: tek bir dil ya da platform için yapılmıştır |
| Örnekler | NGINX, Apache HTTP Server, Caddy, IIS | Tomcat, 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 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
}
}# 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 4Sı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.