Nginx all in one cozum gibi bir sey. Cok fazla ozelligi var ve cogu proje icin bu ozellikler overkill. Ama endustri standardi seviyesinde bir tool ve kullanmayi ogrenmek yararli olur. Ayrica oldukca hafif olmasi gibi bir artisida var.
Loadbalancing, reverse proxy, content cache, TCP/UDP proxy server ve mail proxy server olarak kullanabiliyorsun.
Nginx event-driven bir modele sahip. Apache MPM (Multi-processing module) kullaniyor.
Apache'nin uc MPM modu var. Prefork, Worker, Event-driven.
Prefork modunda process per connection kullanir. Bir process havuzu vardir, ve bu process havuzundaki processleri kullanarak yanit verir. Eger process havuzundan daha fazla istek gelirse ve yanit verecek process yoksa, config'e bagli olarak yeni process yaratabilir veya baglantiyi bekletebilir.
Worker modunda worker processler olusturur ve bu worker processler'in icerisinde thread havuzu kullanir. Thread per connection kullaniyor bu modda. Ancak [Worker -> [Thread, Thread, ...], Worker -> [Thread, Thread, ...], ...] seklinde ilerliyor sema biraz daha. Process havuzunda oldugu gibi, mevcut threadleri kullanarak yanit verecek. Eger havuzdaki thread sayisindan fazla baglanti gelirse yeni thread olusturabilir yada baglantiyi bekletebilir.
Guncel uygulamalarda genel olarak en verimli mod event-driven mod. Bi event-loop'ta asenkron I/O ile islemleri yonetiyor. Dolayisiyla tek bir thread ile binlerce baglantiyi yonetebilirken eger yuk fazlalasirsa yeni bir event loop threadi yaratabilir, gereken agir islemler icin ayri thread/process edebilir yada baglantiyi isleyecek baska biri varsa ona gonderebilir. (CGI gibi) Worker moddaki gibi, ana process config'de belirtilen sayi kadar worker cagirir ve bu workerlar genelde tek thread'de calisir.
Nginx varsayilan olarak event-driven modda. Bunu goze alarak gelistirildi. Dolayisiyla cok daha dusuk bir memory footprint'ine sahip. Ve daha hizli genel itibariyle. Ek olarak sahip oldugu tumlesik ozelliklerde, gerektiginde hizlica bir seyleri deploy etmeye yardimci oluyor. Dolayisiyla nginx tavsiye ederim.
Eksik anlattigim bir sey var mi bilmiyorum.
Benim tercihim nginx'ten yana olur.