Perbandingan Apache vs Nginx

Apache dan Nginx (Engine X) adalah dua web server yang paling populer didunia yang bertanggung jawab untuk melayani lebih dari 50% lalu lintas di internet. Kali ini kita akan membahas perbandingan Apache vs Nginx.

Pengantar

Apache dan Nginx (Engine X) adalah dua web server open source paling umum di dunia. Kedua web server tersebut bertanggung jawab untuk melayani lebih dari 50% lalu lintas di internet. Keduanya mampu menangani beragam beban kerja dan bekerja dengan perangkat lunak lain untuk menyediakan layanan web yang lengkap.

Meskipun Apache dan Nginx memiliki banyak kualitas, mereka tidak boleh dianggap sebagai sepenuhnya dapat dipertukarkan. Masing-masing unggul dengan caranya sendiri dan penting untuk memahami situasi di mana Anda mungkin perlu mengevaluasi kembali server web pilihan Anda. Artikel ini akan dikhususkan untuk diskusi tentang bagaimana setiap server berfungsi di berbagai kebutuhan/bidang.

Gambaran Umum

Sebelum kita memulai pembahasan perbedaan antara Apache dan Nginx, mari kita lihat latar belakang dari kedua proyek ini dan karakteristik umum mereka.

Apache

Apache HTTP Server dibuat oleh Robert McCool pada tahun 1995 dan telah dikembangkan di bawah Apache Software Foundation sejak 1999. Karena server web HTTP adalah proyek asli yayasan dan sejauh ini merupakan perangkat lunak yang paling populer, sering kali disebut sebagai “Apache”.

Server web Apache telah menjadi server paling populer di internet sejak tahun 1996. Karena popularitas ini, Apache mendapatkan manfaat dari dokumentasinya yang hebat dan dukungan terintegrasi dari proyek perangkat lunak lain.

Apache sering dipilih oleh administrator web karena fleksibilitas, kekuatan, dan dukungannya yang luas. Apache dapat dikembangkan melalui sistem modul yang dapat dimuat secara dinamis dan dapat memproses sejumlah besar bahasa pemrograman yang diterjemahkan tanpa menghubungkan ke perangkat lunak yang terpisah.

Nginx

Pada tahun 2002, Igor Sysoev mulai bekerja pada Nginx untuk menangani masalah C10K, yang merupakan tantangan bagi server web untuk menangani sepuluh ribu koneksi bersamaan sebagai persyaratan untuk web modern. Rilis publik awal dibuat pada tahun 2004, memenuhi tujuan ini dengan mengandalkan arsitektur asynchronous dan events-driven.

Nginx mulai populer sejak awal dirilis karena pemanfaatan sumber daya yang ringan dan kemampuannya untuk berjalan di perangkat keras yang minim. Nginx unggul dalam menyajikan konten statis dengan cepat dan dirancang untuk meneruskan permintaan dinamis ke perangkat lunak lain.

Nginx sering dipilih oleh administrator web karena efisiensi sumber daya dan responsifnya di bawah beban berat.

Arsitektur Penanganan Koneksi

Satu perbedaan besar antara Apache dan Nginx adalah cara mereka menangani koneksi dan lalu lintas. Hal ini mungkin memberikan perbedaan paling signifikan dalam cara mereka merespon berbagai kondisi lalu lintas.

Apache

Apache menyediakan berbagai multi-processing modules (Apache menyebutnya MPM) yang menentukan bagaimana permintaan klien ditangani. Pada dasarnya, ini memungkinkan administrator untuk mengganti arsitektur penanganan koneksinya dengan mudah. Beberapa modul tersebut diantaranya:

  • mpm_prefork adalah kumpulan proses dengan single thread untuk menangani permintaan. Setiap proses dapat menangani satu koneksi. MPM ini sangat cepat selama jumlah permintaan lebih sedikit dari jumlah proses. Tetapi kinerjanya akan menurun jika jumlah permintaan melalui jumlah proses. Setiap proses mengkonsumsi RAM yang cukup signifikan.
  • mpm_worker kumpulan proses yang menggunakan thread Masing-masing proses dapat menangani beberapa thread. Masing-masing thread dapat menangani satu koneksi. Thread (proses ringan) lebih baik daripada proses dan MPM ini memiliki skala lebih baik dari mpm_prefork.
  • mpm_event mirip dengan mpm_worker (menggunakan thread). MPM ini dioptimalkan untuk menangani koneksi yang aktif secara tetap. Koneksi yang tidak aktif (terutama yang terus dibuat terbuka dengan fitur HTTP keep-alive) akan diserahkan kembali ke manajemen thread yang terdedikasi.

Seperti yang telah disebutkan diatas, Apache menyediakan arsitektur yang fleksibel untuk memilih koneksi yang berbeda dan algoritma penanganan permintaan. Pilihan yang disediakan, sebagian besar merupakan fungsi dari evolusi server dan meningkatnya kebutuhan akan konkurensi karena lanskap internet telah berubah.

Nginx

Nginx hadir setelah Apache, dengan lebih banyak perbaikan atas masalah konkurensi yang akan menghadapi situs pada skala besar. Dengan memanfaatkan pengetahuan ini, Nginx dirancang untuk menggunakan algoritma penanganan koneksi asynchronous, non-blocking dan algoritma penanganan koneksi event-driven.

Nginx membuat kumpulan worker process yang masing-masing dapat menangani ribuan koneksi. Worker process menyelesaikannya dengan menerapkan mekanisme putaran cepat yang terus-menerus memeriksa dan memproses event.

Setiap koneksi yang ditangani oleh worker process ditempatkan dalam event-loop. Di mana koneksi tersebut bergabung dengan koneksi lain. Dalam loop, event diproses secara tidak sinkron (asynchronously), memungkinkan worker process menangani secara non-blocking. Ketika koneksi ditutup, koneksi akan dihapus dari loop.

Baca Juga:  Konfigurasi Setelah Menginstal Ubuntu Server 16.04

Pemrosesan koneksi seperti ini memungkinkan Nginx dapat digunakan untuk skala luas dengan perangkat yang memiliki spesifikasi terbatas. Selama server tersebut adalah single-threaded dan proses-proses tidak muncul untuk menangani koneksi baru, penggunaan RAM dan CPU cenderung tetap relatif konsisten, bahkan pada saat melayani beban berat.

Konten Statis vs Dinamis

Dalam hal kasus penggunaan, salah satu perbandingan paling umum antara Apache dan Nginx adalah cara di mana setiap server menangani permintaan untuk konten statis dan dinamis.

Apache

Server Apache dapat menangani konten statis menggunakan metode berbasis file konvensional. Kinerja operasi ini adalah fungsi dari metode MPM yang dijelaskan di atas.

Apache juga dapat memproses konten dinamis dengan menyematkan prosesor bahasa pemrograman yang bersangkutan ke setiap worker instance. Ini memungkinkan Apache untuk mengeksekusi konten dinamis dalam server web itu sendiri tanpa harus bergantung pada komponen eksternal. Prosesor dinamis ini dapat diaktifkan melalui penggunaan modul yang dapat dimuat secara dinamis.

Konfigurasi pemrosesan dinamis yang lebih sederhana merupakan kemampuan Apache untuk menangani konten dinamis. Komunikasi tidak perlu dikoordinasikan dengan perangkat lunak tambahan dan modul dapat dengan mudah diganti jika persyaratan konten berubah.

Nginx

Nginx tidak memiliki kemampuan untuk memproses konten dinamis secara bawaan. Untuk menangani PHP dan permintaan lain (atau konten dinamis lainnya), Nginx harus beralih ke prosesor eksternal untuk dieksekusi dan menunggu konten yang dirender dikirim kembali. Hasilnya render tersebut kemudian dapat disampaikan ke klien.

Bagi administrator, hal ini menandakan bahwa komunikasi harus dikonfigurasi antara Nginx dan prosesor melalui salah satu protokol yang didukung Nginx (http, FastCGI, SCGI, uWSGI, memcache). Hal ini memang sedikit mempersulit, terutama ketika mencoba mengantisipasi jumlah koneksi yang diperbolehkan, karena koneksi tambahan akan digunakan untuk setiap panggilan ke prosesor.

Namun, cara Nginx ini memiliki beberapa kelebihan juga. Selama interpreter dinamis tidak tertanam dalam worker process, overhead-nya hanya akan ada untuk konten dinamis. Konten statis dapat disajikan dengan cara yang mudah dan interpreter hanya akan dihubungi jika diperlukan. Apache juga dapat berfungsi dengan cara ini, tetapi menghapus manfaat fitur yang dijelaskan di bagian sebelumnya.

Konfigurasi Terdistribusi vs Terpusat

Salah satu perbedaan yang paling jelas antara kedua server web ini adalah apakah konfigurasi level direktori diizinkan dalam direktori konten.

Apache

Apache menyertakan opsi untuk memberikan konfigurasi tambahan berdasarkan per direktori dengan memeriksa dan menginterpretasikan perintah dalam file yang ada di dalam direktori konten itu sendiri. File-file tersebut dikenal sebagai file .htaccess.

Selama file-file ini berada di dalam direktori konten itu sendiri, ketika menangani permintaan, Apache memeriksa setiap komponen path ke file yang diminta untuk file .htaccess dan menerapkan perintah yang ditemukan di dalamnya. Secara efektif memungkinkan konfigurasi server web yang terdesentralisasi, yang sering digunakan untuk mengimplementasikan penulisan ulang URL, pembatasan akses, otorisasi dan otentikasi, bahkan kebijakan caching.

Contoh di atas semuanya dapat dikonfigurasi dalam file konfigurasi Apache utama. File .htaccess memiliki beberapa keuntungan penting. Pertama, karena ini diinterpretasikan setiap kali ditemukan di sepanjang jalur permintaan, konfigurasi diimplementasikan segera tanpa memuat ulang server. Kedua, memungkinkan pengguna yang tidak memiliki hak istimewa untuk mengontrol aspek-aspek tertentu dari konten web itu sendiri tanpa memberi mereka kendali atas seluruh file konfigurasi.

Hal ini memberikan cara mudah untuk aplikasi web tertentu. Seperti Content Management System, untuk mengonfigurasi environment-nya tanpa harus mengatur hak akses ke file konfigurasi utama. Cara ini juga banyak digunakan oleh penyedia shared-hosting untuk menjaga kendali atas konfigurasi utama dari kendali klien. Terkecuali kendali untuk direktori klien itu sendiri.

Nginx

Nginx tidak menginterpretasikan file .htaccess dan tidak menyediakan mekanisme untuk mengevaluasi konfigurasi per-direktori di luar file konfigurasi utama. Ini mungkin kurang fleksibel dibandingkan model Apache, tetapi memang memiliki kelebihan tersendiri.

Improvisasi yang paling menonjol dari sistem konfigurasi .htaccess per-direktori adalah peningkatan kinerja. Pengaturan khas Apache yang memungkinkan .htaccess dalam direktori apapun, server akan memeriksa file-file ini di setiap direktori induk yang mengarah ke file yang diminta (untuk setiap permintaan). Jika satu atau lebih file .htaccess ditemukan selama pencarian, mereka harus dibaca dan diinterpretasikan.

Baca Juga:  Twitter Uji Coba Desain Web Terbarunya

Dengan tidak mengizinkan penggantian direktori, Nginx dapat melayani permintaan lebih cepat dengan melakukan pencarian direktori tunggal dan membaca file untuk setiap permintaan (dengan asumsi bahwa file tersebut ditemukan dalam struktur direktori konvensional).

Keuntungan lain yaitu terkait keamanan. Mendistribusikan akses konfigurasi level direktori juga mendistribusikan tanggung jawab keamanan kepada pengguna lain (individu) yang mungkin tidak dipercaya untuk menangani tugas ini dengan baik. Selain itu, hal ini juga memastikan administrator untuk mempertahankan kontrol atas seluruh server web dan dapat mencegah beberapa kesalahan keamanan yang mungkin terjadi ketika akses diberikan kepada pihak lain.

File vs Interpretasi Berbasis URI

Kedua server ini berbeda dalam menginterpretasikan permintaan dan memetakannya ke sumber daya yang sebenarnya pada sistem.

Apache

Apache memiliki kemampuan untuk menginterpretasikan permintaan sebagai sumber daya fisik pada sistem file atau sebagai lokasi URI yang mungkin memerlukan evaluasi yang lebih abstrak. Secara umum, pengguna Apache menggunakan blok <Directory> atau <Files>, selama itu menggunakan blok <Location> untuk sumber daya yang lebih abstrak.

Karena Apache dirancang dari bawah ke atas sebagai server web, biasanya untuk menginterpretasikan permintaan sebagai sumber daya sistem file. Dimulai dengan mengambil root dokumen dan menjadi bagian dari permintaan diikuti dengan host dan port untuk mencoba menemukan file yang sebenarnya. Pada dasarnya, hierarki sistem file direpresentasikan di web sebagai document tree yang tersedia.

Apache menyediakan sejumlah alternatif ketika permintaan tidak cocok dengan sistem file yang mendasarinya. Misalnya, arahan Alias dapat digunakan untuk memetakan ke lokasi alternatif. Menggunakan blok <Location> adalah metode untuk bekerja dengan URI itu sendiri, bukan sistem file. Ada juga varian Regular Expression yang dapat digunakan untuk menerapkan konfigurasi secara lebih fleksibel di seluruh sistem file.

Meskipun Apache memiliki kemampuan untuk beroperasi pada sistem file dan web space, Apache sangat condong ke metode sistem file. Hal ini terlihat dalam beberapa rancangan desain, termasuk penggunaan file .htaccess untuk konfigurasi per-direktori. Dokumentasi Apache sendiri memperingatkan terhadap menggunakan blok berbasis URI untuk membatasi akses ketika request mirrors yang mendasarinya adalah sistem file.

Nginx

Nginx dibuat dapat berfungsi sebagai server web dan server proxy. Karena arsitektur yang diperlukan untuk kedua peran ini, Nginx diutamakan bekerja dengan URI, menerjemahkan ke sistem file bila perlu. Hal ini dapat dilihat dalam beberapa cara Nginx, dimana file-file konfigurasi Nginx dibangun dan diinterpretasikan.

Sebagai contoh, blok konfigurasi utama Nginx adalah blok server dan blok location. Blok server menginterpretasikan host yang diminta, sedangkan blok location bertanggung jawab untuk pencocokan bagian dari URI yang datang setelah host dan port. Pada poin ini, permintaan diinterpretasikan sebagai URI, bukan sebagai lokasi pada sistem file.

Untuk file statis, semua permintaan pada akhirnya harus dipetakan ke lokasi di sistem file. Pertama, Nginx memilih blok server dan lokasi yang akan menangani permintaan dan kemudian menggabungkan dokumen root dengan URI, mengadaptasi dengan apa pun yang diperlukan sesuai dengan konfigurasi yang ditentukan.

Ini mungkin tampak serupa, tetapi mem-parsing permintaan (terutama sebagai URI) alih-alih lokasi sistem file memungkinkan Nginx untuk lebih mudah berfungsi di kedua web, mail, dan peran sebaai server proxy. Nginx dikonfigurasikan hanya memberikan bagaimana cara menanggapi pola permintaan yang berbeda. Nginx tidak memeriksa sistem file untuk sampai siap melayani permintaan sebagai penjelasan dari pertanyaan mengapa ia tidak menerapkan bentuk file .htaccess.

Sistem Modul

Baik Nginx dan Apache dapat dikembangkan melalui sistem modul. Perlu diketahui bahwa cara kerja keduanya berbeda secara signifikan.

Apache

Sistem modul Apache memungkinkan Anda untuk load atau unload modul secara dinamis untuk memenuhi kebutuhan Anda selama menjalankan server. Apache core selalu ada, sementara modul dapat diaktifkan atau dinonaktifkan, menambahkan atau menghapus fungsionalitas tambahan dan menghubungkan ke server utama.

Apache menggunakan fungsi ini untuk berbagai macam tugas. Karena kematangan platform, ada perpustakaan modul yang tersedia secara luas. Ini dapat digunakan untuk mengubah beberapa fungsionalitas inti dari server, seperti mod_php, yang menanamkan interpreter PHP ke setiap worker yang berjalan.

Namun, modul tidak terbatas pada pemrosesan konten dinamis. Di antara fungsi-fungsi lain, mereka dapat digunakan untuk menulis ulang URL, mengautentikasi klien, menguatkan server, pencatatan, caching, kompresi, proksi, pembatasan rate, dan enkripsi. Modul dinamis dapat memperluas fungsionalitas dari inti secara signifikan tanpa banyak pekerjaan tambahan.

Baca Juga:  Cara Instal PHP 7.2 di Ubuntu 16.04 (PPA)

Nginx

Nginx juga mengimplementasikan sistem modul, tetapi sangat berbeda jika dibandingkan dengan sistem modul Apache. Dalam Nginx, modul tidak dapat dimuat secara dinamis, sehingga harus dipilih dan dikompilasi ke dalam perangkat lunak inti.

Bagi banyak pengguna, ini membuat Nginx menjadi kurang fleksibel. Terutama bagi pengguna yang tidak nyaman memelihara perangkat lunak yang dikompilasi sendiri di luar sistem pengemasan konvensional distribusi mereka. Meskipun paket distribusi cenderung menyertakan modul yang paling umum digunakan, jika Anda memerlukan modul non-standar, Anda harus membuat server sendiri dari sumbernya.

Modul Nginx masih sangat berguna dan mereka memungkinkan mendikte
Anda apa yang Anda inginkan dari server dengan hanya menyertakan fungsionalitas yang ingin Anda gunakan. Beberapa pengguna juga mungkin menganggap ini lebih aman, karena komponen yang sewenang-wenang tidak dapat dihubungkan ke server.

Modul Nginx memungkinkan banyak kemampuan yang sama dengan modul Apache. Misalnya, modul Nginx dapat memberikan dukungan proxy, kompresi, pembatasan rate, pencatatan, rewrite, geolokasi, otentikasi, enkripsi, streaming, dan fungsionalitas untuk mail.

Dukungan, Ekosistem, dan Dokumentasi

Poin utama yang perlu dipertimbangkan adalah proses pembangunan dan menjalankan layanan dengan mudah mendapatkan bantuan dan dukungan serta dokumentasi yang tersedia di perangkat lunak lain.

Apache

Karena Apache telah lama populer, dukungan untuk server cukup banyak. Ada perpustakaan dokumentasi besar pihak pertama dan ketiga yang tersedia untuk server inti dan untuk skenario berbasis tugas yang menghubungankan Apache dengan perangkat lunak lain.

Apache secara umum akan mendapat lebih banyak dukungan dari pihak ketiga karena pangsa pasarnya dan telah lama populer. Administrator juga lebih mungkin memiliki pengalaman dengan Apache tidak hanya karena prevalensinya, tetapi juga karena banyak orang memulai dalam menggunakan skenario shared-hosting yang hampir secara eksklusif mengandalkan Apache karena kemampuan .htaccess sebagai manajemen terdistribusi.

Nginx

Nginx mengalami peningkatan dukungan karena mulai banyak pengguna yang mengadopsinya sebagai server web mereka, tetapi masih ada beberapa yang harus dilakukan di beberapa hal.

Di masa lalu, sulit untuk menemukan dokumentasi berbahasa Indonesia maupun Inggris yang komprehensif tentang Nginx karena sebagian besar pengembangan awal dan dokumentasi berada di Rusia. Ketika minat pada proyek Nginx tumbuh, dokumentasi telah diisi dan sekarang ada banyak dokumentasi di situs Nginx atau melalui pihak ketiga.

Sehubungan dengan aplikasi pihak ketiga, dukungan dan dokumentasi menjadi semakin tersedia. Dalam beberapa dokumenrasi, ada yang memberikan pilihan konfigurasi otomatis antara Apache dan Nginx.

Apache dan Nginx Tetap Perlu Digunakan

Setelah mempelajari keunggulan dan batasan dari Apache dan Nginx, Anda mungkin memiliki keputusan yang lebih baik tentang server web mana yang lebih sesuai dengan kebutuhan Anda. Namun banyak pengguna menemukan bahwa untuk meningkatkan kekuatan, agar masing-masing server menggunakannya bersama-sama.

Konfigurasi untuk menyatukan keduanya adalah menempatkan Nginx di depan Apache sebagai reverse proxy. Hal ini memungkinkan Nginx untuk menangani semua permintaan dari klien. Kita perlu juga mengambil keuntungan dari kecepatan pemrosesan Nginx yang cepat dan kemampuan untuk menangani sejumlah besar koneksi secara bersamaan.

Untuk konten statis, Nginx yang unggul. Konten akan disajikan dengan cepat dan dikirim langsung ke klien. Untuk konten dinamis (misalnya file PHP), Nginx akan mem-proxy permintaan ke Apache, yang kemudian dapat memproses hasilnya dan mengembalikan halaman yang diberikan. Kemudian Nginx dapat meneruskan konten ke klien.

Pengaturan ini berfungsi dengan baik bagi banyak orang karena memungkinkan Nginx berfungsi sebagai mesin sortasi (mensortir). Cara ini akan menangani semua permintaan (yang bisa) dan meneruskan yang tidak memiliki kemampuan untuk melayani. Dengan mengurangi permintaan yang diminta untuk ditangani oleh server Apache, kita dapat menguranginya dengan beberapa pemblokiran yang terjadi saat proses atau thread Apache terisi.

Konfigurasi ini juga memungkinkan Anda untuk meningkatkan dengan menambahkan server backend tambahan (jika diperlukan). Nginx dapat dikonfigurasi untuk menyampaikan ke kumpulan server dengan mudah, juga meningkatkan ketahanan konfigurasi ini terhadap kegagalan.

Kesimpulan

Seperti yang telah kita bahas, baik Apache dan Nginx adalah server web yang power-full dan fleksibel. Untuk memutuskan server mana yang terbaik untuk Anda tergantung kebutuhan setiap proyek Anda sendiri, mana yang lebih cocok.

Mungkin ada perbedaan antara proyek satu dengan yang lain yang memerlukan spesifikasi server agar proyek bekerja lebih baik. Pada akhirnya, tidak ada server web selalu cocok untuk semua proyek, jadi sesuaikan mana yang paling tepat untuk kebutuhan aplikasi web Anda.