NGINX vs Apache – Web Server Terbaik di 2024

Mana yang lebih cepat? Mana yang lebih mudah dikonfigurasi? Bagaimana cara kerja masing-masing server?

NGINX dan Apache memiliki arsitektur, konfigurasi, dan kemampuan kinerja yang berbeda. Bagaimana keduanya dapat bersaing satu sama lain? Kami akan membahas secara mendalam kedua solusi ini dan membandingkan bagaimana keduanya mengukur satu sama lain.

NGINX dan Apache adalah dua pilihan utama perangkat lunak server. Apache menggunakan process-driven architecture, dan single thread  menangani setiap permintaan koneksi, sedangkan NGINX menggunakan asynchronous event-driven architecture.

 

 

Poin-poin penting NGINX dan Apache

  • Apache dan NGINX adalah dua server web terpopuler yang banyak digunakan untuk hosting aplikasidan situs web.
  • Apache menggunakan model yang digerakkan oleh proses, membuat proses atau utas baru untuk setiap permintaan, sedangkan NGINX menggunakan arsitektur asinkron yang digerakkan oleh peristiwa, yang lebih efisien dalam menangani konkurensi yang tinggi.
  • NGINX lebih cocok untuk konten statis dan situs web dengan lalu lintas tinggi, sedangkan Apache ideal untuk lingkungan yang membutuhkan penyesuaian ekstensif dan penanganan konten dinamis.
  • Kedua server dapat bekerja bersama dalam pengaturan hibrida, di mana NGINX menangani konten statis dan bertindak sebagai proksi terbalik, sementara Apache menangani konten dinamis.

APACHE

Apache, juga dikenal sebagai Apache HTTP Server, adalah perangkat lunak server web open source berstandar industri yang dikembangkan dan dikelola oleh Apache Software Foundation. Server web Apache menggunakan arsitektur process-driven yang membuat thread baru untuk setiap permintaan baru.

Kelebihan

  • Open source yang bisa digunakan untuk individu dan organisasi secara gratis
  • Mendukung module, plugins, dan extension pihak ketiga untuk meningkatkan fungsionalitasnya
  • Perangkat lunak server yang fleksibel dan handal dengan rekam jejak pengujian dan pengembangan yang kuat
  • Dukungan komunitas dari basis penggunanya yang aktif
  • Menawarkan akses root ke konfigurasi server; non-previleged user dapat mengedit izin menggunakan file .htaccess
  • Ideal untuk lingkungan hosting bersama (shared hosting)
 

Kekurangan

  • Mengkonsumsi lebih banyak CPU dan memori daripada alternatif lainnya
  • Mungkin tidak ideal untuk mengirimkan konten statis 
  • Konfigurasi yang rumit karena fungsinya beragam
  • Tidak ada dukungan untuk pemrosesan asynchronous

NGINX

NGINX (diucapkan sebagai engine-x) adalah server web yang menggunakan arsitektur berbasis asynchronous event-driven untuk mengirimkan konten ke klien.
Sama seperti Apache, NGINX adalah open source yang dapat digunakan, dimodifikasi, dan didistribusikan secara bebas.
Arsitektur event-driven NGINX non-blocking menjadikannya solusi ideal untuk memproses banyak permintaan. Ia bekerja dengan membuat satu controller proses dan beberapa worker proses. Pengontrol menjaga semuanya tetap bekerja, tetapi setiap worker menangani tugas-tugasnya.
Karena setiap proses bersifat asynchronous, worker process dapat mengeksekusi banyak permintaan tanpa memblokir permintaan lainnya. Meskipun memiliki banyak proses, NGINX menggunakan memori yang rendah, yang meningkatkan efisiensi. Hal ini membuat NGINX ideal untuk situs web dengan lalu lintas tinggi, sehingga memberikan keunggulan dibandingkan server web lainnya.
Selain itu, NGINX sangat ideal untuk load balancing dan caching, WebSockets, dan rewriting URL, yang memungkinkan administrator untuk memodifikasi request yang masuk dan mengizinkan atau membatasi access.
NGINX bersifat dinamis, dengan banyak modul ekstensi yang menyediakan berbagai fungsionalitas situs web . Ia hadir secara untuk semua sistem operasi Linux dan Unix utama. Meskipun dapat diinstal pada Microsoft Windows, namun mungkin kurang efisien, terutama ketika melakukan scaling atau berurusan dengan authentication UDP.

 

Kelebihan

  • Arsitektur Asynchronous dan event-driven membuat NGINX ideal untuk banyak permintaan bersamaan (multiple concurrent request)
  • Ideal untuk server dengan lalu lintas tinggi
  • Dapat digunakan sebagai reverse proxy server
  • Low memori footprint dengan penggunaan CPU dan memori yang efisien
  • Mudah dikonfigurasi dan digunakan, bahkan untuk pemula
  • Dukungan dan dokumentasi komunitas yang aktif

Kekurangan

  • Dukungan terbatas untuk sistem operasi Windows
  • Tidak ada dukungan untuk konten dinamis, dan menggunakan permintaan proxy pada semua konten dinamis ke server backend sebelum menyajikannya ke klien
  • Sangat bergantung pada penggunaan modul pihak ketiga eksternal

Architecture

Apache

Seperti yang telah disebutkan sebelumnya, Apache, secara default, menggunakan arsitektur process-driven, dan sebuah thread tunggal menangani setiap permintaan koneksi.

Apache hadir dengan beberapa kelemahan potensial. Konsumsi sumber daya yang besar dan kurangnya dukungan untuk asynchronous process sehingga dapat memperlambat server Anda, meningkatkan waktu muat (load time) halaman dan terkadang menyebabkan pemadaman situs web.

Apache dengan pintar menyelesaikan masalah ini dengan menggunakan modul multi-pemrosesan (MPM) yang menerima dan merespons permintaan server. Anda bisa memilih salah satu dari tiga MPM utama untuk mengoptimalkan server Anda, tetapi Anda hanya bisa memuat satu MPM dalam satu waktu.

  • mpm_worker: MPM worker membuat beberapa thread dengan setiap proses, dan setiap thread dapat menangani permintaan koneksi. Sistem Anda kini dapat melayani beberapa thread sekaligus dan berskala lebih baik karena setiap thread dalam MPM membutuhkan lebih sedikit sumber daya daripada satu proses.
  • mpm_event: MPM ini mirip dengan MPM worker tetapi juga menangani koneksi keep-alive. MPM ini menyisihkan thread untuk menjaga koneksi tertentu tetap hidup sembari mengalokasikan permintaan yang sedang berjalan ke thread lain. Dengan cara ini, permintaan keep-alive tidak memperlambat keseluruhan sistem. Hal ini menjadikan event MPM sebagai opsi yang paling hemat sumber daya di server Apache.
  • mpm_prefork: Ini adalah MPM yang tidak di-baca di mana setiap Child Process hanya dapat menangani satu permintaan dalam satu waktu. Setelah permintaan melebihi jumlah yang ditentukan, kinerja server akan sangat terganggu, dan penskalaan dengan MPM ini menjadi bermasalah. MPM prefork sangat ideal untuk stabilitas dan kompatibilitas.
 

NGINX

Arsitektur NGINX bersifat asynchronous dan event-driven, yang berarti dapat menangani beberapa koneksi simultan dalam satu proses. Hal ini dilakukan dengan menjalankan satu proses pengontrol dan beberapa proses child.

Jenis arsitektur ini membuat NGINX ideal untuk skalabilitas karena dapat mendistribusikan permintaan klien secara efisien di seluruh proses, bahkan pada sistem berdaya rendah.

Proses pengontrol melakukan operasi tingkat tinggi yang membaca dan menginterpretasikan berkas konfigurasi, mengikat ke port, dan membentuk child process.

Child process sangat penting bagi operasi NGINX, dan terbagi dalam tiga kategori:

  • Worker processes (proses pekerja): Menangani ribuan koneksi HTTP secara bersamaan dan menghilangkan kebutuhan akan proses atau thread baru. Worker process berjalan secara independen, membuat koneksi worker yang menangani satu thread permintaan. Proses ini juga membaca dan menulis konten ke disk server dan berkomunikasi dengan upstream server.
  • Cache loader (proses pemuat cache): Proses-proses ini memuat cache disk ke dalam memori bersama yang digunakan oleh proses-worker lainnya. Proses ini hanya berjalan sekali setelah NGINX dimulai.
  • Cache manager processes (Proses pengelola cache): Menjaga data yang di-cache dalam batas yang dikonfigurasi dan memeriksanya secara berkala untuk memotong data yang paling lama diakses.
 

NGINX mungkin merupakan pilihan terbaik jika situs web Anda memiliki tingkat lalu lintas yang tinggi, seperti toko e-niaga atau layanan penyimpanan awan.

Perfomance

Apache

Apache menggunakan pendekatan file-based untuk mengirimkan konten statis, sebuah fungsi yang bisa dilakukan oleh semua MPM-nya. Di luar itu, Apache unggul sebagai perangkat lunak server pengiriman content yang dinamis.

Apache hanya bergantung pada komponen internalnya dan mengintegrasikan processor bahasa pemrograman yang unik ke dalam setiap instance worker.

Anda bisa mengaktifkan language processor di setiap modul menggunakan modul yang dapat dimuat Apache. Dengan begitu, server Apache dapat menjalankan konten dinamis di dalam server tanpa memerlukan dukungan perangkat lunak eksternal.

NGINX

NGINX mengirimkan file statis lebih cepat daripada Apache karena arsitektur asynchronous-nya. Hal ini menjadikannya perangkat lunak server yang ideal untuk konten web statis. Namun, ia gagal ketika mengirimkan konten dinamis.

Karena NGINX tidak memiliki kemampuan bawaan untuk memproses konten dinamis, maka NGINX akan menggunakan proses eksternal untuk eksekusi. Ia harus menunggu perangkat lunak eksternal untuk memproses dan mengembalikan konten yang telah diterjemahkan sebelum mengirimkannya kembali ke peramban. Ini berarti lebih banyak persyaratan konfigurasi administrator.

Kesimpulan: Apache dan NGINX unggul dalam hal pengiriman konten statis, tetapi Apache ideal untuk konten dinamis. NGINX tidak secara asli memproses konten dinamis dan mungkin membutuhkan prosesor eksternal di seluruh protokol yang dapat diakomodasinya.

Security

Apache

Selama bertahun-tahun, Apache telah menjadi perangkat lunak yang aman untuk koneksi server HTTPD.

Apache menggunakan tiga pengaturan konfigurasi untuk menggagalkan serangan penolakan layanan (DoS):

  • TimeOut: Menentukan jumlah waktu – 60 detik secara default – server menunggu sebelum gagal melakukan permintaan.
  • KeepAliveTimeout: Mengelola berapa lama koneksi server Apache tetap terbuka untuk permintaan baru.
  • RequestReadTimeout: Memutuskan koneksi dengan pengguna yang mengirim permintaan lebih lambat dari yang diharapkan.
 

NGINX

Langsung dari kemasannya, NGINX menawarkan kemampuan pembatas kecepatan, yang mengelola kecepatan permintaan yang masuk. NGINX memutus koneksi jika nilai kecepatannya melebihi atau berada di bawah aktivitas peramban pada umumnya. Arsitekturnya yang unik juga melindungi upstream server dari permintaan yang terlalu banyak – sebuah gejala dari serangan DDoS (distributed denial-of-service).

Anda juga bisa mengonfigurasi NGINX untuk menolak akses ke alamat IP, bandwidth, dan sub-request tertentu. Di luar itu, NGINX mendukung protokol Transport Layer Security (TLS) dan Secure Sockets Layer (SSL).

Kesimpulan: Baik Apache maupun NGINX menawarkan fitur keamanan yang luar biasa untuk kebutuhan Anda. Namun, Anda mungkin memerlukan langkah-langkah keamanan ekstra untuk melindungi situs web Anda dari serangan jahat.

Configuration

Apache

Apache menggunakan sistem konfigurasi terdistribusi, yang memungkinkan Anda untuk menempatkan berkas .htaccess dalam direktori tertentu. Hal ini memungkinkan Anda memodifikasi pengaturan pada tingkat direktori tanpa memerlukan akses ke berkas konfigurasi server utama.

Meskipun fleksibilitas ini dapat membantu dalam lingkungan hosting bersama atau bagi para pengembang yang membuat perubahan cepat, namun ada beberapa kekurangannya. Setiap kali permintaan dibuat, Apache memeriksa berkas .htaccess di setiap direktori di sepanjang jalur permintaan, yang dapat memperlambat kinerja. Selain itu, jika berkas-berkas ini tidak diamankan dengan baik, mereka dapat menimbulkan risiko keamanan.

NGINX

NGINX menggunakan model konfigurasi terpusat. Semua pengaturan ditentukan dalam satu berkas konfigurasi utama, membuat sistem lebih ramping dan efisien. Karena NGINX tidak memeriksa berkas konfigurasi pada tingkat direktori, NGINX dapat menawarkan kinerja yang lebih baik dan lebih sedikit potensi kerentanan keamanan.

Namun, pendekatan terpusat ini juga berarti bahwa NGINX tidak menyediakan tingkat kontrol rinci yang sama pada tingkat direktori, yang mungkin menjadi batasan dalam lingkungan di mana Anda membutuhkan konfigurasi terdistribusi.

Kesimpulan: Apache lebih fleksibel; Anda bisa mengonfigurasinya menggunakan berkas .htaccess. Hal ini memungkinkan Anda untuk mengonfigurasi direktori secara terpisah dari berkas server lainnya. NGINX tidak sefleksibel itu, yang membuatnya lebih cepat dan lebih efisien daripada Apache.

Platform

Apache

Apache dikenal luas karena dukungan platformnya yang luas. Apache tersedia di sebagian besar sistem operasi utama, termasuk Windows, Linux, dan macOS. Kompatibilitasnya dengan berbagai macam platform membuatnya menjadi pilihan serbaguna, terutama dalam lingkungan yang membutuhkan dukungan lintas platform.

NGINX

NGINX terutama dioptimalkan untuk sistem seperti Unix, seperti Linux dan macOS. Dia memang menawarkan dukungan untuk Windows, tetapi kinerja pada sistem operasi itu cenderung kurang efisien dibandingkan dengan kinerjanya pada Linux.

Kesimpulan: Baik Apache maupun NGINX menawarkan dukungan platform yang kuat, tetapi Apache menonjol karena keserbagunaannya di berbagai sistem operasi yang lebih luas, termasuk Windows, Linux, dan macOS. Hal ini menjadikan Apache pilihan yang lebih baik untuk lingkungan yang membutuhkan fungsionalitas lintas platform yang konsisten.

Memory Usage

Apache

Apache cenderung mengonsumsi lebih banyak CPU dan memori, terutama ketika beban lalu lintasnya berat. Karena menggunakan model berbasis process atau thread, Apache membuat process atau thread baru untuk setiap permintaan yang masuk. Saat lalu lintas meningkat, jumlah process atau thread bertambah, sehingga menyebabkan penggunaan memori yang lebih tinggi dan cycle CPU yang lebih banyak.

Hal ini dapat menyebabkan Apache membutuhkan sumber daya sistem dalam jumlah yang signifikan di lingkungan dengan lalu lintas tinggi, yang berpotensi memengaruhi kinerja dan menyebabkan waktu respons yang lebih lambat jika server kewalahan.

NGINX

NGINX jauh lebih efisien dalam hal penggunaan CPU dan memori. Berkat arsitektur non-blocking yang event-driven dan non-blocking, NGINX dapat menangani ribuan koneksi simultan dengan memori dan CPU minimal.

Dibandingkan membuat process atau thread baru untuk setiap request, NGINX secara efisien mengelola banyak koneksi dalam satu thread, sehingga mengurangi footprint resource-nya.

Kesimpulan: Arsitektur non-blocking yang digerakkan oleh peristiwa (event-driven) dari NGINX memungkinkannya untuk menangani trafik yang tinggi dengan konsumsi sumber daya yang minimal. Hal ini menjadikannya pilihan yang lebih baik untuk server yang perlu mengelola volume lalu lintas yang besar secara efisien.

Modules

Apache

Apache dikenal dengan sistem modulnya yang sangat banyak. Apache mendukung berbagai macam modul yang sudah dibuat sebelumnya dan modul pihak ketiga, seperti mod_rewrite untuk manipulasi URL, mod_ssl untuk mengaktifkan enkripsi SSL/TLS, dan mod_php untuk menangani skrip PHP secara langsung.

Anda dapat memuat modul-modul Apache ini secara dinamis, membuat server lebih fleksibel dalam hal kustomisasi.

NGINX

NGINX juga menggunakan pendekatan modular, tetapi Anda harus mengompilasi modul-modulnya ke dalam server pada waktu build. Ini berarti Anda tidak dapat memuat modul secara dinamis pada NGINX setelah menginstalnya, membuat kustomisasi sedikit kurang fleksibel daripada Apache.

Kesimpulan: Apache menawarkan fleksibilitas yang lebih besar dengan sistem modul dinamisnya, yang memungkinkan administrator untuk mengaktifkan atau menonaktifkan modul sesuai kebutuhan. Hal ini membuatnya lebih mudah beradaptasi dengan perubahan kebutuhan.

Interpratation

Apache

Apache terutama menggunakan file-based interpretation. Ketika sebuah permintaan dibuat, Apache memperlakukannya sebagai path file dan mencari file yang berhubungan di server.

Pendekatan ini lebih mudah dipahami, terutama ketika melayani berkas lokal, seperti HTML, gambar, atau skrip, karena permintaan secara langsung berhubungan dengan file stucture. Namun, metode ini bisa jadi kurang efisien dalam beberapa kasus, terutama ketika berurusan dengan routing yang kompleks.

Apache juga dapat menangani interpretasi berbasis URI, tetapi umumnya tidak direkomendasikan dalam kasus tertentu karena menambah kompleksitas dan dapat menyebabkan inefisiensi.

NGINX

NGINX menggunakan interpretasi berbasis URI secara default. Ini berarti ia memproses permintaan berdasarkan URI daripada mencari path file di server.

Pendekatan ini lebih cepat dan lebih efisien, terutama ketika menyajikan konten statis atau bertindak sebagai reverse proxy, karena tidak perlu terus-menerus memeriksa sistem berkas untuk setiap permintaan.

Kesimpulan: Interpretasi berbasis file dari Apache membuatnya mudah digunakan untuk melayani file lokal dan pengaturan yang lebih sederhana, sedangkan interpretasi berbasis URI dari NGINX memberikan kinerja dan efisiensi yang lebih baik. Jadi, jika Anda menginginkan penanganan sumber daya yang lebih efisien dan pemrosesan permintaan yang lebih cepat, pendekatan berbasis URI dari NGINX lebih unggul.

Kapan memilih NGINX atau Apache

Pilihan antara NGINX dan Apache sering kali bergantung pada kebutuhan spesifik situs web atau aplikasi Anda. Berikut ini adalah beberapa kasus penggunaan umum untuk masing-masing:

Kasus penggunaan Apache

  • Website berukuran kecil hingga menengah: Apache sangat cocok untuk situs web yang lebih kecil yang tidak perlu menangani lalu lintas yang besar.
  • Kebutuhan akan kustomisasi yang luas: Apache sangat ideal jika proyek Anda membutuhkan kustomisasi yang ekstensif.
  • Preferensi untuk file .htaccess: Apache adalah pilihan yang lebih baik untuk lingkungan di mana konfigurasi tingkat direktori dengan .htaccess lebih disukai atau diperlukan.

Kasus penggunaan NGINX

  • Website dan aplikasi dengan lalu lintas tinggi: NGINX dirancang untuk menangani beban tinggi secara efisien, sehingga ideal untuk situs web atau aplikasi perusahaan.
  • Kebutuhan akan reverse proxy atau load balancing: NGINX adalah pilihan terbaik jika Anda mencari reverse proxy atau load balancing bawaan.
  • Mengoptimalkan performa konten statis: Kecepatan dan efisiensi NGINX menjadikannya pilihan utama untuk situs web perusahaan yang menyajikan banyak konten statis.

Menggunakan Apache dan NGINX bersamaan

Dengan menggabungkan Apache dan NGINX, Anda bisa mendapatkan manfaat dari kecepatan dan efisiensi NGINX dalam menangani berkas statis dan lalu lintas yang padat, serta fleksibilitas dan dukungan Apache untuk pemrosesan konten dinamis.

Dengan mengingat hal itu, berikut ini adalah beberapa skenario umum di mana Anda dapat menggabungkan kedua server:

  • Menggunakan NGINX sebagai proxy server terbalik untuk Apache: Dalam pengaturan ini, NGINX berada di depan Apache dan merutekan lalu lintas yang masuk ke server Apache. NGINX menangani permintaan klien awal, mengelola koneksi, dan meningkatkan kinerja dengan melepaskan tugas-tugas seperti penghentian SSL dan caching. Pengaturan ini memungkinkan Apache untuk fokus pada pemrosesan konten dinamis.
  • Menggunakan Apache untuk konten dinamis dan NGINX untuk konten statis: Anda dapat mengonfigurasi NGINX untuk melayani aset statis seperti gambar, CSS, dan JavaScript, sementara Apache menangani konten dinamis seperti skrip PHP atau Python. Pendekatan ini mengoptimalkan penggunaan sumber daya dengan menugaskan setiap server untuk menangani tugas-tugas yang paling baik, sehingga menghasilkan waktu muat yang lebih cepat dan skalabilitas yang lebih baik.

Kesimpulan

Ketika mempertimbangkan web server yang ideal untuk proyek Anda, NGINX dan Apache adalah dua pilihan terbaik. Arsitektur mereka berbeda, menggunakan mekanisme yang berbeda untuk mencapai tujuan yang sama. Apache menggunakan arsitektur yang digerakkan oleh process, sedangkan NGINX menggunakan arsitektur asynchronous, arsitektur event-driven.

Meskipun kedua opsi perangkat lunak ini mungkin tampak seperti kompetitor, keduanya bekerjasama secara lebih efisien. NGINX mengedepankan kemampuannya yang ringan, sedangkan Apache menyediakan dukungan yang kuat untuk konten dinamis.

Dengan membiarkan NGINX melakukan pemilahan sementara Apache melakukan pemrosesan, bisa memanfaatkan kekuatan masing-masing untuk keuntungan situs web Anda dan para penggunanya.

share artikel ini