Apache HTTP Server dan Nginx merupakan dua pilihan yang paling populer dan banyak digunakan oleh developer maupun system administrator di seluruh dunia. Keduanya memiliki sejarah panjang dan basis pengguna yang besar, serta mendukung berbagai sistem operasi, termasuk Linux, BSD, dan Windows.
Meski fungsinya sama—menyajikan konten web ke pengguna—cara keduanya mengelola koneksi dan request sangat berbeda, yang berdampak langsung pada performa server, penggunaan RAM, dan kemampuan menangani traffic tinggi. Hal ini menjadi sangat krusial ketika sebuah situs atau aplikasi harus melayani lebih dari 1500 request simultan, misalnya pada e-commerce saat flash sale, portal berita dengan traffic puncak, atau aplikasi SaaS dengan banyak user aktif.
Apache dikenal fleksibel, modular, dan kompatibel dengan konfigurasi per-directory seperti .htaccess, sehingga memudahkan pengelolaan di hosting shared. Namun, model multi-process / multi-thread yang digunakannya menyebabkan penggunaan RAM yang tinggi ketika jumlah worker meningkat, sehingga scaling pada traffic tinggi membutuhkan konfigurasi yang cermat, misalnya menggunakan MPM Event dan PHP-FPM untuk aplikasi PHP.
Di sisi lain, Nginx menggunakan event-driven, asynchronous, dan non-blocking architecture. Hal ini memungkinkan satu worker Nginx menangani ribuan koneksi simultan dengan penggunaan RAM yang relatif rendah, sehingga sangat cocok untuk server dengan traffic tinggi, static content, atau sebagai reverse proxy. Namun, Nginx tidak mendukung modul runtime per-directory seperti Apache, sehingga konfigurasi lebih “rigid” dan semua rewrite atau pengaturan harus dilakukan melalui file server block.
Artikel ini akan membahas perbandingan Apache dan Nginx dari beberapa aspek penting:
- Arsitektur: bagaimana masing-masing server menangani request dan koneksi.
- Performa: kemampuan menangani traffic tinggi (>1500 request simultan), penggunaan RAM, dan response time.
- Konfigurasi optimal: pengaturan Apache MPM Event + PHP-FPM dan Nginx + PHP-FPM untuk performa maksimal.
- Skenario penggunaan: kapan harus memilih Apache, Nginx, atau kombinasi keduanya.
Artikel ini juga menyertakan contoh server dengan 8 GB RAM, MySQL, dan PHP-FPM, sehingga pembaca bisa melihat perkiraan penggunaan memori, jumlah worker, dan kemampuan handling request simultan pada kondisi riil. Dengan demikian, pembaca dapat membuat keputusan teknis berdasarkan data nyata dan perhitungan kapasitas server, bukan sekadar teori.
Contents
1️⃣ Arsitektur
Apache
Apache menggunakan model proses/thread-based dengan beberapa MPM (Multi-Processing Module):
-
Prefork
-
Setiap request diproses child process terpisah.
-
Cocok untuk aplikasi PHP lama yang tidak thread-safe.
-
Contoh nyata: Jika ServerLimit=10 dan MaxRequestWorkers=50, setiap proses child memakan ±100 MB RAM → 10 × 100 MB = 1 GB RAM untuk worker saja.
-
Worker
-
Thread-based, satu child bisa memiliki banyak thread.
-
Lebih hemat RAM daripada prefork.
-
Contoh: 10 proses × 25 threads = 250 worker, RAM digunakan ±2–3 GB tergantung request PHP.
-
Event
-
Thread-based + asynchronous keep-alive.
-
Efisien untuk traffic tinggi, idle thread tidak memblokir koneksi baru.
-
Contoh: server 8 GB RAM, PHP-FPM max_children 45, Apache Event MPM bisa handle ±1500 simultan tanpa OOM.
Kelebihan:
Fleksibel, banyak modul, kompatibel dengan .htaccess.
Kekurangan:
- Overhead memori tinggi per worker.
- Scaling pada traffic tinggi terbatas jika RAM kecil.
Nginx
Nginx menggunakan event-driven, asynchronous, non-blocking architecture:
-
Satu worker bisa menangani ribuan koneksi simultan.
-
Tidak spawn worker per request → scaling lebih efisien.
Contoh nyata:
- Server 4 CPU cores, worker_processes auto → 4 worker.
- worker_connections = 1024 → 4 × 1024 = 4096 koneksi simultan bisa ditangani.
Kelebihan: hemat RAM, performa tinggi, ideal untuk reverse proxy dan static content. Kekurangan: konfigurasi kurang fleksibel, modul runtime tidak bisa dimuat via .htaccess.
2️⃣ Performa untuk Traffic Tinggi (>1500 Simultan)
| Faktor | Apache | Nginx | Contoh nyata |
|---|---|---|---|
| Model concurrency | Multi-process/thread | Event-driven | Apache Event MPM: worker spawn sesuai traffic; Nginx: 4 worker × 1024 connections = 4096 |
| RAM usage | Lebih tinggi (~80–100MB per worker) | Lebih rendah (~5–10MB per worker) | Server 8 GB RAM: Apache max_children 80 → ±7,6 GB untuk PHP-FPM saja; Nginx ±50 MB untuk worker |
| Static content | Baik | Sangat baik | Nginx bisa serve file .jpg/.css 2–3x lebih cepat |
| Dynamic content | Baik dengan PHP-FPM | Baik dengan PHP-FPM, lebih sedikit overhead | PHP-FPM max_children 45 → 45 worker x 100MB ≈ 4,5 GB |
| Load spike handling | Terbatas, worker harus spawn → delay | Sangat efisien, tidak spawn worker | Traffic tiba-tiba naik 2000 request → Apache butuh spawn worker, Nginx langsung handle |
Kesimpulan:
-
Untuk traffic 1500+ simultan, Nginx lebih stabil dan hemat RAM.
-
Apache masih bisa digunakan dengan MPM Event + PHP-FPM, jika server memiliki RAM cukup.
3️⃣ Konfigurasi Optimal
Apache (MPM Event + PHP-FPM)
PHP-FPM Example:
Contoh nyata:
-
Server 8 GB RAM + MySQL 3 GB → sisa ±4–4,5 GB untuk PHP-FPM → max_children 45 worker.
-
StartServers 10 → awal cukup, worker tambahan spawn otomatis sesuai traffic.
Nginx + PHP-FPM
Contoh nyata:
- CPU 4 cores → worker_processes auto = 4.
- worker_connections = 1024 → total koneksi simultan 4096.
- RAM PHP-FPM tetap ±4–4,5 GB, Nginx hanya menggunakan ±50 MB worker.
4️⃣ Kasus Penggunaan
| Skenario | Apache * | Nginx * | KET |
|---|---|---|---|
| Legacy apps dengan modul .htaccess | ✅ | ❌ | WordPress di Apache bisa pakai .htaccess; Nginx perlu rewrite manual |
| Traffic tinggi + static content | ⚠️ | ✅ | Nginx bisa handle 2000 request simultan file CSS/JS dengan RAM <100 MB |
| Reverse proxy / load balancer | ⚠️ | ✅ | Nginx reverse proxy untuk backend Apache/PHP-FPM, load balancing 3 node |
| VPS RAM terbatas | ⚠️ | ✅ | 2 GB RAM VPS → Nginx bisa handle 500–1000 koneksi simultan, Apache cepat OOM |
| Hosting shared / modul banyak | ✅ | ⚠️ | Apache lebih mudah untuk shared hosting, Nginx harus konfigurasi manual |
5️⃣ Kesimpulan
- Traffic tinggi & simultan (>1500 connections) → Nginx lebih stabil dan hemat RAM.
- Legacy Apache apps / modul banyak → tetap bisa pakai Apache MPM Event + PHP-FPM, RAM cukup.
- Kombinasi optimal → Nginx sebagai reverse proxy + Apache backend, menggabungkan kelebihan keduanya.
Contoh road map :
Client → Nginx → (static content? serve langsung) → (dynamic content? proxy) → Apache → PHP-FPM → Client
FAQs
Q1: Bisa Apache handle 1500+ request simultan?
-
Ya, dengan MPM Event + PHP-FPM, RAM cukup, tapi lebih berat dibanding Nginx.
Q2: Apakah Nginx bisa langsung jalankan PHP?
-
Tidak, selalu pakai FastCGI (PHP-FPM).
Q3: Apa keuntungan event-driven?
-
Menangani ribuan koneksi dengan jumlah worker terbatas → efisien RAM.
Q4: Mana lebih mudah konfigurasi modul runtime?
-
Apache lebih fleksibel (misal .htaccess), Nginx harus konfigurasi manual.
Q5: Mana lebih hemat RAM?
-
Nginx, karena worker tidak spawn per request.
Q6: Kombinasi Nginx + Apache?
-
Nginx handle static & proxy, Apache handle PHP/legacy → cocok traffic tinggi.
Q7: Apakah Nginx lebih cepat untuk static file?
-
Ya, biasanya 2–3x lebih cepat daripada Apache.
Q8: Jika server 8GB RAM + MySQL 3GB, max_children 80 aman?
-
Tidak aman, bisa OOM. Lebih aman max_children ≈ 45 atau Nginx + PHP-FPM ondemand.