Apache dan Nginx adalah dua server web open source paling umum di dunia. Bersama-sama, mereka bertanggung jawab untuk melayani lebih dari 50% lalu lintas di internet. Kedua solusi ini mampu menangani beragam beban kerja dan bekerja dengan perangkat lunak lain untuk menyediakan tumpukan 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 bertumpuk di berbagai bidang.
Apache
Apache HTTP Server dibuat oleh Robert McCool pada tahun 1995 dan telah dikembangkan di bawah arahan 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 mendapat manfaat dari dokumentasi yang hebat dan dukungan terintegrasi dari proyek perangkat lunak lain.
Apache sering dipilih oleh administrator karena fleksibilitas, kekuatan, dan dukungan luasnya. Ia dapat dikembangkan melalui sistem modul yang dapat dimuat secara dinamis dan dapat memproses sejumlah besar bahasa yang ditafsirkan tanpa menghubungkan ke perangkat lunak yang terpisah.
Nginx
Pada tahun 2002, Igor Sysoev mulai bekerja pada Nginx sebagai jawaban untuk masalah C10K, yang merupakan tantangan bagi server web untuk mulai menangani sepuluh ribu koneksi bersamaan sebagai persyaratan untuk web modern. Rilis publik awal dibuat pada tahun 2004, memenuhi tujuan ini dengan mengandalkan arsitektur yang tidak sinkron dan berdasarkan peristiwa.
Nginx telah tumbuh dalam popularitas sejak dirilis karena pemanfaatan sumber daya yang ringan dan kemampuannya untuk skala dengan mudah pada perangkat keras minimal. Nginx unggul dalam menyajikan konten statis dengan cepat dan dirancang untuk meneruskan permintaan dinamis ke perangkat lunak lain yang lebih cocok untuk keperluan itu.
Nginx sering dipilih oleh administrator karena efisiensi sumber daya dan responsifnya di bawah beban. Advokat menyambut fokus Nginx pada server web inti dan fitur proxy.
Arsitektur Penanganan Koneksi
ApacheApache menyediakan berbagai modul multi-pemrosesan (Apache menyebut MPM ini) yang menentukan bagaimana permintaan klien ditangani. Pada dasarnya, ini memungkinkan administrator untuk mengganti arsitektur penanganan koneksinya dengan mudah. Ini adalah:
- mpm_prefork : Modul pemrosesan ini memunculkan proses dengan satu utas masing-masing untuk menangani permintaan. Setiap anak dapat menangani satu koneksi pada satu waktu. Selama jumlah permintaan lebih sedikit dari jumlah proses, MPM ini sangat cepat.
- mpm_worker : Modul ini memunculkan proses yang masing-masing dapat mengelola beberapa utas. Masing-masing utas ini dapat menangani satu koneksi.
- mpm_event : Modul ini mirip dengan modul pekerja di sebagian besar situasi, tetapi dioptimalkan untuk menangani koneksi yang tetap hidup.
Seperti yang Anda lihat, 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
muncul setelah Apache, dengan lebih banyak kesadaran tentang masalah konkurensi
yang akan menghadapi situs pada skala. Dengan memanfaatkan pengetahuan
ini, Nginx dirancang dari bawah ke atas untuk menggunakan algoritme penanganan
koneksi asinkron, non-pemblokiran, yang digerakkan oleh peristiwa.
Nginx
memunculkan proses pekerja, yang masing-masing dapat menangani ribuan
koneksi. Proses pekerja menyelesaikan ini dengan menerapkan mekanisme
putaran cepat yang terus-menerus memeriksa dan memproses
peristiwa. Memisahkan pekerjaan yang sebenarnya dari koneksi memungkinkan
setiap pekerja untuk mempedulikan dirinya dengan koneksi hanya ketika sebuah
acara baru telah dipicu.
Setiap
koneksi yang ditangani oleh pekerja ditempatkan dalam loop acara di mana mereka
ada dengan koneksi lain. Dalam loop, acara diproses secara tidak sinkron,
memungkinkan pekerjaan ditangani secara non-pemblokiran. Ketika koneksi
ditutup, itu dihapus dari loop.
Gaya
pemrosesan koneksi ini memungkinkan Nginx untuk skala sangat jauh dengan sumber
daya yang terbatas. Karena server single-threaded dan proses tidak muncul
untuk menangani setiap koneksi baru, memori dan penggunaan CPU cenderung tetap
relatif konsisten, bahkan pada saat beban berat.
Konten Statis vs Dinamis
Apache
Server
Apache dapat menangani konten statis menggunakan metode berbasis file
konvensionalnya. Kinerja operasi ini terutama merupakan fungsi dari metode
MPM yang dijelaskan di atas.
Apache
juga dapat memproses konten dinamis dengan menyematkan prosesor bahasa yang
bersangkutan ke setiap instance pekerjanya. Ini memungkinkannya 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.
Kemampuan
Apache untuk menangani konten dinamis secara internal berarti konfigurasi
pemrosesan dinamis cenderung lebih sederhana. 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 asli. Untuk
menangani PHP dan permintaan lain untuk konten dinamis, Nginx harus beralih ke
prosesor eksternal untuk dieksekusi dan menunggu konten yang dirender dikirim
kembali. Hasilnya kemudian dapat disampaikan ke klien.
Untuk
administrator, ini berarti bahwa komunikasi harus dikonfigurasi antara Nginx
dan prosesor melalui salah satu protokol yang Nginx tahu bagaimana berbicara
(http, FastCGI, SCGI, uWSGI, memcache). Hal ini dapat sedikit mempersulit,
terutama ketika mencoba mengantisipasi jumlah koneksi yang diperbolehkan,
karena koneksi tambahan akan digunakan untuk setiap panggilan ke prosesor.
Namun,
metode ini memiliki beberapa kelebihan juga. Karena penerjemah dinamis
tidak tertanam dalam proses pekerja, overhead-nya hanya akan ada untuk konten
dinamis. Konten statis dapat disajikan dengan cara yang mudah dan
penerjemah hanya akan dihubungi jika diperlukan. Apache juga dapat
berfungsi dengan cara ini, tetapi menghapus manfaat di bagian sebelumnya.
Konfigurasi Terdistribusi vs Terpusat
Apache
Apache
menyertakan opsi untuk memperbolehkan konfigurasi tambahan berdasarkan per
direktori dengan memeriksa dan menafsirkan arahan dalam file tersembunyi di
dalam direktori konten itu sendiri. File-file ini dikenal sebagai
.htaccess
file.
Karena
file-file ini berada di dalam direktori konten itu sendiri, ketika menangani
permintaan, Apache memeriksa setiap komponen path ke file yang diminta
untuk
.htaccess
file
dan menerapkan arahan yang ditemukan di dalamnya. Ini secara efektif
memungkinkan konfigurasi server web yang terdesentralisasi, yang sering
digunakan untuk mengimplementasikan penulisan ulang URL, pembatasan akses,
otorisasi dan otentikasi, bahkan kebijakan caching.
Sementara
contoh-contoh di atas semuanya dapat dikonfigurasi dalam file konfigurasi
Apache utama,
.htaccess
file
memiliki beberapa keuntungan penting. Pertama, karena ini ditafsirkan
setiap kali ditemukan di sepanjang jalur permintaan, mereka diimplementasikan
segera tanpa memuat ulang server. Kedua, memungkinkan untuk memungkinkan
pengguna yang tidak memiliki hak istimewa untuk mengontrol aspek-aspek tertentu
dari konten web mereka sendiri tanpa memberi mereka kendali atas seluruh file
konfigurasi.
Nginx
Nginx
tidak menafsirkan
.htaccess
file, juga tidak menyediakan mekanisme untuk
mengevaluasi konfigurasi per-direktori di luar file konfigurasi utama. Ini
mungkin kurang fleksibel daripada model Apache, tetapi memang memiliki
kelebihan tersendiri.
Peningkatan
yang paling menonjol dari
melakukan pencarian direktori tunggal dan membaca file untuk setiap permintaan (dengan asumsi bahwa file tersebut ditemukan dalam struktur direktori konvensional).
.htaccess
sistem konfigurasi tingkat direktori adalah
peningkatan kinerja. Untuk pengaturan khas Apache yang memungkinkan .htaccess
dalam direktori apa pun, server akan memeriksa
file-file ini di setiap direktori
induk yang mengarah ke file yang diminta, untuk setiap permintaan. Jika
satu atau lebih .htaccess
file ditemukan selama pencarian ini, mereka
harus dibaca dan ditafsirkan. Dengan tidak mengizinkan penggantian direktori,
Nginx dapat melayani permintaan lebih cepat denganmelakukan pencarian direktori tunggal dan membaca file untuk setiap permintaan (dengan asumsi bahwa file tersebut ditemukan dalam struktur direktori konvensional).
Keuntungan
lain terkait keamanan. Mendistribusikan akses konfigurasi tingkat
direktori juga mendistribusikan tanggung jawab keamanan kepada pengguna
individu, yang mungkin tidak dipercaya untuk menangani tugas ini dengan
baik. Memastikan bahwa administrator mempertahankan kontrol atas seluruh
server web dapat mencegah beberapa kesalahan langkah keamanan yang mungkin
terjadi ketika akses diberikan kepada pihak lain.
Dukungan, Kompatibilitas, Ekosistem, dan Dokumentasi
Apache
Karena
Apache telah lama populer, dukungan untuk server cukup banyak. Ada
perpustakaan besar dokumentasi pihak pertama dan ketiga yang tersedia untuk
server inti dan untuk skenario berbasis tugas yang melibatkan menghubungkan
Apache dengan perangkat lunak lain.
Seiring
dengan dokumentasi, banyak alat dan proyek web menyertakan alat untuk bootstrap
sendiri dalam lingkungan Apache. Ini mungkin termasuk dalam proyek itu
sendiri, atau dalam paket yang dikelola oleh tim pengemasan distribusi Anda.
Apache,
secara umum, akan mendapat lebih banyak dukungan dari proyek pihak ketiga hanya
karena pangsa pasarnya dan lamanya waktu telah tersedia. Administrator
juga agak lebih mungkin memiliki pengalaman bekerja dengan Apache tidak hanya
karena prevalensinya, tetapi juga karena banyak orang memulai dalam skenario
shared-hosting yang hampir secara eksklusif mengandalkan Apache karena
.htaccess
kemampuan manajemen terdistribusi.
Nginx
Nginx
mengalami peningkatan dukungan karena lebih banyak pengguna yang mengadopsinya
untuk profil kinerjanya, tetapi masih ada beberapa yang harus dilakukan di
beberapa bidang utama.
Di
masa lalu, sulit untuk menemukan dokumentasi berbahasa Inggris yang
komprehensif tentang Nginx karena fakta bahwa sebagian besar pengembangan awal
dan dokumentasi berada di Rusia. Ketika minat pada proyek tumbuh,
dokumentasi telah diisi dan sekarang ada banyak sumber daya administrasi di
situs Nginx dan melalui pihak ketiga.
Sehubungan
dengan aplikasi pihak ketiga, dukungan dan dokumentasi menjadi semakin
tersedia, dan pengelola paket mulai, dalam beberapa kasus, untuk memberikan
pilihan antara konfigurasi otomatis untuk Apache dan Nginx. Bahkan tanpa
dukungan, mengonfigurasi Nginx agar berfungsi dengan perangkat lunak alternatif
biasanya mudah selama proyek itu sendiri mendokumentasikan persyaratannya
(izin, header, dll.).
Tidak ada komentar:
Posting Komentar