GNU/Linux >> Belajar Linux >  >> Ubuntu

Apache vs Nginx - Perbandingan Mendetail

Pendahuluan

Server web telah menjadi bagian mendasar dari internet sejak awal World Wide Web. Perangkat lunak server web menerima permintaan dari klien jarak jauh dan melayani klien dengan halaman web yang disimpan di perangkat keras, seperti server khusus.

Dalam artikel perbandingan ini, Anda akan membaca tentang perbedaan antara dua server web sumber terbuka paling populer saat ini – Apache dan Nginx.

Tentang Server Apache

Apache HTTP Server (atau singkatnya Apache) adalah perangkat lunak server web sumber terbuka yang dikembangkan oleh Apache Software Foundation. Awalnya dirancang sebagai server web berbasis proses, tetapi pada versi 2.0 dan pengenalan Modul Multi-Pemrosesan, ini dapat dikonfigurasi sebagai server berbasis proses dan server berulir. Arsitektur modular server juga memungkinkan fitur seperti penanganan protokol modular.

Fitur penting lainnya dari arsitektur Apache adalah filter, yang memungkinkan modul berinteraksi dengan konten yang dibuat oleh modul lain. Interaksi ini mencakup enkripsi, pemindaian virus, dan kompresi konten statis dan dinamis.

Catatan: Apache HTTP Server bekerja paling baik di Linux. Pelajari cara menginstal Apache di CentOS. Untuk Ubuntu, baca Cara Menginstal Apache Web Server di Ubuntu. Untuk manajemen server web Apache dasar, pelajari cara memulai, menghentikan, dan memulai ulang Apache.

Tentang Server Nginx

Nginx (diucapkan engine-x) adalah server web sumber terbuka yang dikembangkan oleh Nginx, bagian dari F5, Inc.
Sebagai server HTTP, Nginx menggunakan arsitektur event-driven (asynchronous) yang sangat skalabel yang memungkinkan kinerja tinggi dan jejak memori yang kecil.

Nginx juga bisa berfungsi sebagai reverse proxy, load balancer, mail proxy, dan HTTP cache. Dalam beberapa kasus penggunaan, Nginx juga berfungsi sebagai akselerator web atau terminator SSL/TLS.

Catatan: Seperti Apache, Nginx juga paling kompatibel dengan Linux. Untuk menginstal Nginx di CentOS, lihat Cara Menginstal Nginx di CentOS. Untuk menginstalnya di Ubuntu, baca Cara Menginstal Nginx di Ubuntu. Untuk petunjuk pengelolaan Nginx dasar, pelajari cara memulai, menghentikan, dan memulai ulang Nginx.

Apache vs Nginx:Tinjauan Singkat

Di bawah ini adalah ikhtisar singkat tentang poin utama perbandingan antara Apache dan Nginx.

Kategori Apache Nginx
Biaya Tersedia gratis Produk utama, OSS Nginx, tersedia gratis.

Nginx Plus adalah opsi berbayar, yang menampilkan dukungan dan fitur tambahan.
Lisensi Lisensi Apache 2.0 Lisensi BSD 2 Klausul
Ditulis dalam C, XML C
Sistem operasi Linux, Microsoft Windows, sistem mirip Unix lainnya, OpenVMS Linux, macOS, Microsoft Windows, sistem mirip Unix lainnya, HP-UX, IBM AIX
Arsitektur Modular, berbasis proses/berulir Modular, Berbasis Peristiwa
Konfigurasi Didistribusikan Terpusat
Interpretasi Terutama berbasis file Terutama berbasis URI
Fitur - Modul multi-pemrosesan
- Dukungan konfigurasi per direktori
- Membalikkan proxy dengan caching
- Load balancing kompatibel dengan IPv6
- Mendukung HTTP/2
- Dukungan XML Dukungan FTP (dengan modul terpisah)
- Melayani file statis dan indeks
- Buka cache deskriptor file
- Proksi terbalik yang dipercepat dengan caching
- Penyeimbangan beban dan toleransi kesalahan
- IPv6 didukung, tidak diaktifkan secara default
- Mendukung HTTP/2
- Proksi surat
- Tembolok HTTP
Dukungan - Dokumentasi Server HTTP Apache
- Daftar Pengguna Server HTTP Apache
- IRC
- Stack Overflow
- Dukungan komersial oleh penyedia pihak ke-3
- Milis yang dioperasikan komunitas
- IRC
- Stack Overflow
- Dukungan resmi berbayar untuk Nginx Plus

Arsitektur

Server HTTP Apache fitur inti server kecil dan beberapa modul. Modul dikompilasi secara statis atau dimuat secara dinamis.

Saat boot, Apache memulai beberapa proses server. Tujuan dari proses tersebut adalah untuk berbagi beban kerja. Proses utama adalah proses induk , sementara yang lain adalah proses turunan . Setiap proses turunan membuat sejumlah utas server yang telah ditentukan sebelumnya yang menangani permintaan masuk.

Untuk mengoptimalkan server untuk sistem operasi, Apache menggunakan Modul Pemrosesan Multi (MPM) . Tujuan dari modul ini adalah untuk mengikat port jaringan, menerima permintaan, dan mengelola penanganan permintaan dengan menetapkan proses anak untuk melakukan tugas-tugas ini. Apache menginstal MPM yang paling sesuai untuk lingkungan bergantung pada OS yang terdeteksi dan kemampuannya.

Perpustakaan Apache Portable Runtime (APR) adalah bagian penting lain dari server Apache. APR menyediakan lapisan OS lintas platform. Lapisan ini berfungsi sebagai API universal untuk pengembang, menghilangkan kebutuhan untuk membuat kode seputar masalah atau fitur khusus platform.

Nginx menampilkan arsitektur berbasis peristiwa yang memungkinkan penskalaan mudah pada perangkat keras modern.

Seperti Apache, Nginx memiliki proses utama primary . Tujuan dari proses ini adalah untuk mengontrol pengikatan port dan pembacaan konfigurasi. Namun, tidak seperti Apache, proses yang dibuat oleh proses master dirancang berdasarkan model proses yang dapat diprediksi, yang tujuan utamanya adalah memanfaatkan sumber daya perangkat keras sebaik mungkin.

  • Pemuat cache adalah proses yang berjalan saat start-up dan memuat cache berbasis disk ke dalam memori.
  • Pengelola cache memastikan entri cache disk berada dalam batas ukuran yang ditentukan.
  • Proses pekerja melakukan operasi baca dan tulis dan tangani koneksi jaringan.

Proses pekerja dimulai dengan mendengarkan dan menunggu acara. Setiap kali koneksi masuk baru diminta, sebuah acara dimulai. Setelah membuat koneksi, Nginx membuat deskriptor file yang hanya menggunakan sedikit memori proses pekerja. Fitur ini membuat Nginx secara signifikan lebih skalabel daripada Apache, yang menggunakan pendekatan berbasis proses, di mana setiap koneksi terpisah menghabiskan banyak sumber daya.

Modul

Baik Apache dan Nginx menggunakan pendekatan berbasis modul. Namun, implementasinya berbeda.

Apache menampilkan modul yang dimuat secara dinamis yang dapat digunakan kapan pun diperlukan. Server mendukung banyak modul berbeda, baik resmi maupun pihak ketiga. Hal ini membuat Apache menjadi platform yang sangat dapat disesuaikan sehingga pengguna dapat menyesuaikan dengan kebutuhan mereka.

Nginx modul perlu diintegrasikan ke dalam inti dan tidak dapat dimuat secara dinamis. Untuk memasukkan modul non-standar, pengguna harus mengkompilasi server mereka dari sumbernya. Meskipun kurangnya fleksibilitas ini mungkin tampak membatasi, ini juga berarti keamanan yang lebih baik karena mengizinkan integrasi modul dinamis menimbulkan masalah keamanan.

Kinerja

Dengan memanfaatkan berbagai Modul Multi-Pemrosesan yang didukung, Apache dapat berjalan dalam tiga mode:

  • Mode berbasis proses.
  • Proses hybrid dan mode thread.
  • Mode peristiwa hibrida.

Pengguna dapat mengkonfigurasi Apache dengan cara yang sesuai dengan kebutuhan mereka. Dengan demikian, sumber daya server digunakan secara efektif untuk kasus penggunaan tertentu.

Apache memiliki serangkaian pengoptimalan untuk meningkatkan throughput dan skalabilitasnya. Beberapa pengoptimalan ini adalah bagian dari konfigurasi server default, dan administrator server dapat mengonfigurasi sisanya tergantung pada kebutuhan spesifik sistem mereka. Penyesuaian kinerja dapat memecahkan banyak masalah konfigurasi runtime dan waktu kompilasi Apache.

Nginx adalah server web yang dibuat khusus untuk mengungguli Apache. Ia berhasil melakukannya dalam beberapa kategori, seperti waktu koneksi, jumlah permintaan yang diterima per detik, kecepatan transfer, dan waktu yang dihabiskan untuk memproses permintaan.

Administrator server dapat lebih lanjut menyetel Nginx untuk kinerja dengan mengedit konfigurasi server agar sesuai dengan spesifikasi sistem. Menyesuaikan proses dan koneksi pekerja, mengaktifkan kompresi Gzip, dan melakukan caching untuk file statis secara signifikan meningkatkan kinerja Nginx.

Konten Statis vs Dinamis

Apache memproses konten statis dan dinamis dengan menggunakan modul yang dimuat secara dinamis dan tidak bergantung pada komponen eksternal.

Sementara kedua server menunjukkan kinerja yang sama dalam pemuatan konten dinamis, Nginx menggunakan lebih sedikit memori dan menangani sekitar empat kali lebih banyak permintaan per detik untuk menyajikan file statis. Ini terutama karena penerjemah untuk konten dinamis bukan merupakan bagian integral dari server Nginx. Sebagai gantinya, server meneruskan semua permintaan halaman web dinamis ke proses eksternal, menunggu proses mengembalikan konten, dan kemudian menyajikan konten ke klien. Meskipun hal ini membuat pemrosesan halaman dinamis menjadi lebih rumit, hal ini menyederhanakan proses penyajian halaman statis.

Konfigurasi Terdistribusi vs Terpusat

Apache konfigurasi didistribusikan. Server menyediakan dukungan untuk file .htaccess untuk memfasilitasi jenis konfigurasi ini.

.htaccess file adalah file konfigurasi tingkat direktori yang didukung oleh beberapa server web, digunakan untuk menangani masalah akses situs web, seperti pengalihan URL, pemendekan URL, kontrol akses (untuk halaman web dan file yang berbeda), dan banyak lagi. Manfaat utama dari pendekatan ini adalah perubahan yang dibuat di .htaccess langsung diterapkan pada sistem. Mengubah file konfigurasi utama memerlukan sistem restart untuk menerapkan perubahan.

Selanjutnya, pada server yang menghosting banyak situs web, .htaccess memungkinkan setiap pengguna untuk membuat perubahan pada konfigurasi situs web mereka tanpa mengubah file konfigurasi utama server.

Nginx konfigurasi terpusat dan tidak mendukung .htaccess . Alasannya adalah karena menggunakan .htaccess juga memiliki beberapa kelemahan. Yang penting adalah hilangnya kinerja – setiap kali server menerima permintaan HTTP, server perlu memeriksa semua direktori induk yang dapat menghosting .htaccess file, untuk melihat apakah mereka berisi itu. Kekhawatiran lain yang signifikan adalah keamanan. Mengizinkan pengguna yang tidak memiliki hak istimewa untuk mengubah konfigurasi server dapat menjadi tidak aman jika tidak diterapkan dengan benar.

Karena tidak ada konfigurasi tingkat direktori di Nginx, pengguna melakukan semua perubahan konfigurasi dengan menulis arahan ke dalam file konfigurasi utama, nginx.conf . Perubahan diterapkan setelah server dimuat ulang.

Arsitektur Penanganan Koneksi

Apache menangani permintaan klien dengan memanfaatkan modul multi-pemrosesan. Manfaat utama dari ini adalah bahwa arsitektur penanganan koneksi dapat dengan mudah diganti kapan pun dibutuhkan. Modul-modul tersebut adalah:

  • mpm_prefork_module – Modul prefork membuat proses dengan utas untuk setiap permintaan yang perlu ditangani. Setiap proses anak dapat mendukung satu koneksi. Meskipun jumlah proses yang dibuat lebih besar dari jumlah permintaan, modul ini berkinerja baik. Masalah utama modul adalah volume permintaan yang besar secara negatif memengaruhi kinerja dan meningkatkan konsumsi RAM secara signifikan.
  • mpm_worker_module – Modul pekerja membuat proses anak. Setiap proses anak mengelola beberapa utas, dengan setiap utas mendukung koneksi. Karena utas lebih efisien daripada proses, modul ini lebih ramah kinerja daripada modul prefork.
  • mpm_event_module – Modul event memiliki mekanisme yang mirip dengan mekanisme modul pekerja. Namun, itu juga mencoba untuk memecahkan 'tetap hidup ' masalah – fakta bahwa Apache, setelah menyelesaikan permintaan pertama klien, membuat seluruh proses anak atau utas menunggu permintaan lebih lanjut oleh klien. Modul acara menangani masalah ini dengan meminta utas pendengar yang ditunjuk untuk memantau status soket.

Nginx menangani koneksi menggunakan algoritme yang digerakkan oleh peristiwa, non-pemblokiran, dan asinkron. Menggunakan fungsi pengulangan cepat, proses pekerja server dapat menangani banyak koneksi pada saat yang sama dengan terus mencari dan memproses peristiwa.

Saat pekerja membuat koneksi, koneksi bergabung dengan loop peristiwa, di mana ia menjalani pemrosesan asinkron. Ketika koneksi ditutup, itu keluar dari loop. Jenis penanganan koneksi ini memungkinkan Nginx untuk menskalakan dan memanfaatkan sumber daya dengan cara yang ekonomis.

Interpretasi Berbasis File vs URI

Apache terutama menafsirkan permintaan sebagai sumber daya sistem file, menggunakan Directory dan File blok. Server dimulai dengan DocumentRoot dan mencoba mencari file menggunakan bagian dari permintaan yang mengikuti host dan nomor port.

Apache menawarkan cara alternatif untuk melayani permintaan ketika kecocokan yang tepat tidak dapat ditemukan melalui sistem file:

  • Alias memetakan URL ke lokasi sistem file. Ini memungkinkan dokumen disimpan di tempat lain selain di DocumentRoot .
  • Redirect memetakan URL lama ke URL baru. Server meminta klien untuk menemukan sumber daya yang dicari di lokasi yang berbeda.
  • Location blok memungkinkan untuk bekerja dengan URI.

Berlawanan dengan Apache, yang desainnya terutama mencerminkan kebutuhan server web, arsitektur Nginx memungkinkan server digunakan sebagai proxy. Oleh karena itu, Nginx terutama berurusan dengan URI.

Nginx menggunakan blok server dan lokasi sebagai blok konfigurasi utama:

  • Blok server adalah subset dari file konfigurasi yang mendefinisikan server virtual untuk penanganan permintaan. Karena server virtual dapat ditetapkan untuk menangani jenis koneksi tertentu, administrator server dapat menetapkan blok yang berbeda untuk nama domain, port, dan alamat IP yang berbeda.
  • Blok lokasi adalah bagian dari blok server yang menangani permintaan untuk berbagai sumber daya dan URI. Ini mengarahkan permintaan ke lokasi yang benar di sistem file.

Karena beberapa blok dapat bertindak sebagai instance server web individual, Nginx memiliki sistem untuk menemukan kecocokan terbaik untuk setiap permintaan. Ini dilakukan dengan menggunakan listen direktif, yang menemukan kemungkinan kecocokan blok, dan server_name direktif, yang memilih kecocokan terbaik.

Saat Nginx bekerja dengan file statis, ia memetakan permintaan ke sistem file. Namun, server melakukan ini hanya setelah memilih server dan blok lokasi dan menghubungkan root dokumen dan URI. Fakta bahwa Nginx tidak menangani sistem file hingga siap melayani permintaan adalah salah satu alasan mengapa Nginx tidak menampilkan .htaccess file yang setara.

Menyimpan cache

Apache menawarkan caching untuk meningkatkan kinerja server. Ada tiga jenis cache:

  • Tembolok HTTP RFC2616 tiga status menawarkan cache yang cerdas dan sadar-HTTP saat menangani konten proksi atau konten dinamis yang disimpan secara lokal.
  • Cache objek bersama kunci/nilai dua status menawarkan cache objek bersama berbasis kunci/nilai.
  • Caching file khusus memungkinkan pramuat file saat start-up, meningkatkan waktu akses untuk file yang sering dibutuhkan.

Nginx mencapai waktu muat yang lebih cepat dan mengurangi beban server dengan menyimpan konten dinamis untuk akses cepat. Meskipun caching membantu mempercepat situs web dengan lalu lintas tinggi dan volume konten, tidak disarankan dalam skenario lain.

Caching dasar di Nginx hanya menggunakan dua arahan:

  • proxy_cache_path untuk menyetel jalur dan konfigurasi cache dan
  • proxy_cache untuk mengaktifkan cache.

Fitur yang berguna dari Nginx adalah kemampuan untuk mengonfigurasi server untuk menampilkan konten situs web yang di-cache saat server sedang down atau sibuk.

Keamanan

Apache dan Nginx keduanya dianggap aman. Potensi risiko keamanan sebagian besar berasal dari konfigurasi yang buruk. Oleh karena itu, ikuti praktik terbaik keamanan server web untuk meningkatkan keamanan:

Untuk Apache :

  • Sesuaikan konfigurasi untuk mencegah serangan DoS. Beberapa arahan yang relevan untuk ini adalah RequestReadTimeout , KeepAliveTimeout , dan TimeOut .
  • Sesuaikan izin pada ServerRoot direktori.
  • Berhati-hatilah dengan Server Side Include (SSI).
  • Hati-hati dengan skrip CGI.
  • Lindungi setelan sistem dari .htaccess diganti dengan mengonfigurasi file konfigurasi server.
  • Perhatikan log Anda.
  • Selalu perbarui server.

Untuk Nginx :

  • Turunkan risiko eksploitasi kerentanan potensial dengan menonaktifkan modul yang tidak diinginkan.
  • Nonaktifkan server_tokens direktif, yang membuat versi Nginx Anda terlihat oleh publik.
  • Nonaktifkan metode HTTP yang tidak perlu.
  • Kontrol sumber daya dan batasan untuk mencegah potensi serangan DoS.
  • Siapkan, konfigurasikan, dan pantau akses dan log kesalahan untuk memahami status server dengan lebih baik.
  • Sertakan header keamanan.
  • Selalu perbarui server.

Dukungan dan Dokumentasi

Apache menawarkan dukungan komunitas melalui Milis Pengguna Server HTTP Apache. Dukungan juga tersedia di saluran IRC khusus, Stack Overflow, dll.

Dokumentasi Server HTTP Apache menawarkan manual referensi, panduan pengguna, tutorial, dan dokumen lainnya.

Nginx menawarkan dukungan komunitas, yang terdiri dari milis dan forum yang dioperasikan komunitas, serta sumber daya dukungan lainnya seperti Panduan Admin dan Panduan Referensi Modul. Dukungan komersial tersedia untuk opsi berbayar, NGINX Plus.

Dokumentasi Nginx open-source mencakup petunjuk penginstalan, petunjuk, panduan pengembangan, referensi modul, dan dokumen lainnya.

Apache atau Nginx

Data riset pangsa pasar terbaru menunjukkan bahwa Apache sedikit di depan Nginx.

Namun, jika kita hanya melihat 1000 situs web peringkat terbaik, Nginx unggul dengan selisih yang besar.

Baik Apache dan Nginx adalah server yang dipoles dan berkinerja baik. Saat memilih server yang tepat untuk diinstal pada perangkat keras Anda, Anda perlu mempertimbangkan untuk apa Anda akan menggunakannya.

Pilih Apache daripada Nginx jika:

  • Dalam kasus penggunaan Anda, lebih baik bagi pengguna yang tidak memiliki hak istimewa untuk memiliki kendali atas situs web mereka. Salah satu kasus tersebut adalah mengelola lingkungan hosting bersama, di mana .htaccess Apache file menjadi sangat diperlukan.
  • Anda memerlukan modul tertentu yang tidak didukung Nginx.

Pilih Nginx daripada Apache jika:

  • Skenario penggunaan Anda mencakup sebagian besar (atau eksklusif) penyajian konten statis.
  • Anda mengharapkan volume lalu lintas tinggi di situs web Anda.

Kapan Menggunakan Nginx dan Apache

Apache dan Nginx dapat digunakan berdampingan untuk membuat server yang dioptimalkan untuk beban kerja. Nginx diatur untuk bertindak sebagai proxy terbalik untuk Apache, yang memanfaatkan kecepatan pemrosesan dan kemampuan Nginx untuk menangani volume lalu lintas yang besar. Nginx memproses dan menyajikan konten statis sambil meneruskan konten dinamis ke Apache.

Dengan membiarkan Nginx mengurutkan permintaan dan memproses permintaan yang dapat ditanganinya sendiri, Apache menerima volume permintaan yang lebih kecil. Itu secara pre-emptive menyelesaikan potensi masalah kelebihan beban. Karena Nginx dapat berkomunikasi dengan kumpulan server di backend, penambahan lebih banyak server dan penskalaan dapat dilakukan dengan mudah.


Ubuntu
  1. Apache vs Nginx:Server Web Mana yang Harus Anda Pilih

  2. Instal WordPress di Nginx Ubuntu

  3. Instal Apache di CentOS 8

  1. PostgreSQL Vs MySQL:Perbandingan Mendetail

  2. Hadoop vs Spark – Perbandingan Mendetail

  3. Apache Storm vs. Spark:Perbandingan Berdampingan

  1. Cara Menginstal Nginx di Ubuntu 20.04

  2. Menginstal Nginx di Ubuntu 14.04 dan 16.04

  3. NGINX vs Apache – Memilih Server Web Terbaik di 2022