Nginx vs Apache sebagai proxy terbalik, mana yang harus dipilih

36

pertanyaan semacam ini mungkin telah diajukan di sini tetapi saya tidak dapat menemukan yang benar-benar cocok dengan pertanyaan saya. Mendengar bahwa kinerja nginx cukup mengesankan, tetapi Apache memiliki lebih banyak dokumen, komunitas (baca: pakar) untuk mendapatkan bantuan

Sekarang apa yang ingin saya ketahui, bagaimana kedua server web membandingkan dalam hal kinerja, kemudahan konfigurasi, tingkat penyesuaian, dll. SEBAGAI server REVERSE PROXY dalam lingkungan vps ??

Saya masih mempertimbangkan antara keduanya untuk aplikasi web ruby ​​(bukan ROR) yang disajikan dengan thin (salah satu server web ruby).
Jawaban spesifik akan sangat dihargai. Jawaban umum tidak menyentuh bagian ruby ​​tidak apa-apa. Saya masih noob dalam administrasi server web.

mhd
sumber
tnx to martin dan jawaban webdestroya, sekarang saya condong ke nginx
mhd
Bukankah lebih masuk akal untuk menggunakan proksi terbalik yang dirancang khusus seperti pernis?
ptman

Jawaban:

31

Saya ingin memberikan komentar ini karena saya setuju dengan poin terpenting dari jawaban webdestroyas, tetapi terlalu lama.

Anda berada di lingkungan VPS, ini berarti kemungkinan besar RAM Anda hampir habis. Untuk alasan ini saja Anda akan menginginkan Nginx karena jejak memorinya lebih kecil dari Apache.

Juga saya tidak setuju dengan beberapa argumen yang disebutkan.

Kemudahan Konfigurasi:
Nginx tidak lebih sulit daripada Apache. Ini berbeda. Jika Anda terbiasa dengan Apache maka perubahan akan selalu lebih sulit, ini tidak berarti bahwa gaya konfigurasi itu sendiri lebih sulit. Saya bermigrasi sepenuhnya dari Apache ke Nginx lebih dari setahun yang lalu dan hari ini saya akan berjuang untuk mengkonfigurasi server Apache sedangkan saya menemukan Nginx sangat mudah untuk dikonfigurasi.

Untuk Ruby:
Nginx memiliki Penumpang, namun, saya biasanya melihatnya digambarkan sebagai metode yang lebih rendah untuk terhubung ke Ruby. Saya bukan programmer Ruby jadi saya tidak bisa memverifikasi ini tetapi saya sering melihat Unicorn dan Thin disebutkan sebagai alternatif yang lebih baik.

Kesimpulannya:
Nginx dibuat menjadi proxy terbalik. Awalnya yang dilakukannya hanyalah menayangkan file statis dan membalikkan proxy ke server backend melalui HTTP / 1.0. Sejak itu fastcgi, load balancing dan berbagai fitur lainnya telah ditambahkan, tetapi tujuan desain awalnya adalah untuk menyajikan file statis dan membalikkan proxy. Dan ini sangat baik.

Apache, sebaliknya adalah server web tujuan umum. Saya tidak ragu bahwa itu dapat membalikkan proxy dengan sangat baik, tetapi itu tidak dirancang untuk memiliki jejak memori minimal dan sebagai akibatnya membutuhkan lebih banyak sumber daya daripada Nginx, yang berarti argumen lingkungan VPS awal saya ikut bermain.

Martin Fjordvald
sumber
+1 untuk klarifikasi.
John Gardeniers
Saya akan merekomendasikannya sebagai satu-satunya server web Anda. lihat komentar saya serverfault.com/questions/133481/… <- di sini. Saya menggunakannya sebagai satu-satunya server web di VPS saya, dan saya sudah mendapatkan pengguna lain dengan FastCGI untuk aplikasi PHP / CGI mereka.
Jason
Jason Saya telah menggunakannya sebagai satu-satunya server web saya selama lebih dari satu tahun sekarang dan menangani jutaan halaman dimuat per hari. Saya sepenuhnya setuju dengan rekomendasi Anda! :)
Martin Fjordvald
8

Kinerja:
NGinX. Server ini dikenal sebagai salah satu server web dengan kinerja terbaik, dan digunakan oleh banyak perusahaan yang berbeda (Notable, MediaTemple)

Kemudahan Konfigurasi:
Apache. Konfigurasi Apache sangat sederhana, dan sangat kuat. Nginx sangat kuat, tetapi bisa sangat sulit untuk dipahami, karena sepertinya lebih seperti bahasa pemrograman daripada file konfigurasi.

Tingkat Kustomisasi:
Apache. Apache memiliki banyak mod dan plugin lain yang ditulis untuk itu. Walaupun Nginx masih memiliki plugin yang dibuat untuknya, saya pikir Apache memiliki lebih banyak daripada Nginx.

Untuk Ruby:
Saya tahu Nginx dapat digunakan sebagai penyeimbang beban yang kuat dengan Mongrel / webrick. Namun, Apache memiliki Phusion / Penumpang yang membuat integrasi lebih bagus.

Reverse Proxy Winner:
NGinX

Mitch Dempsey
sumber
2
Saya tertarik, tidak berdebat. Mengapa Nginx pemenang untuk proxy terbalik? Sisa jawaban Anda tidak benar-benar membuat satu menonjol dari yang lain. Jika ada yang cenderung mendukung Apache.
John Gardeniers
1
Nah, karena sebagian besar, Anda ingin proxy terbalik karena beban tinggi. Yang berarti kinerja mungkin adalah masalah terbesar, dalam hal ini Nginx adalah pemenang yang mengapa saya memilihnya. Sebagai pengembang, saya suka apache, tetapi dari titik "bagaimana saya bisa mendapatkan kinerja terbanyak dari server web ini", saya akan menggunakan Nginx
Mitch Dempsey
8

Nginx berbasis acara, sedangkan apache berbasis proses. Di bawah beban tinggi, ini membuat semua perbedaan di dunia ... Apache harus memotong atau memulai utas baru untuk setiap koneksi, sementara nginx tidak. Perbedaan ini muncul terutama dalam penggunaan memori, tetapi juga dalam waktu respons pengguna dan metrik kinerja lainnya. Nginx dapat menangani puluhan ribu koneksi keepalive HTTP simultan pada perangkat keras modern. Apache akan menggunakan tumpukan 1-2 MB untuk setiap koneksi, jadi lakukan penghitungan yang Anda lihat bahwa Anda hanya dapat menangani beberapa ratus atau mungkin seribu koneksi secara bersamaan tanpa mulai bertukar.

Kami menggunakan nginx di depan Apache dan IIS di lingkungan kami sebagai proxy load-balancing dan caching, dan tidak bisa lebih bahagia. Kami menggunakan dua kotak nginx ish kecil sebagai ganti sepasang perangkat F5 sewaan yang sangat mahal dan situs kami jauh lebih cepat dalam hal merasakan dan mengukur waktu respons.

rmalayter
sumber
1

Saya berada dalam dilema yang sama dengan Anda sekitar dua minggu yang lalu.

Untuk memberi Anda jawaban yang benar-benar singkat: Dari penelitian saya, nginx benar-benar cepat dan ramah sumber daya, tetapi hanya menyetujui untuk membalikkan file statis proxy. Sisanya terkait dengan solusi yang harus Anda konfigurasi atau skrip jalan Anda.

AFAIK nginx tidak memiliki file htaccess sehingga Anda harus mencari jalan keluar jika tergantung pada fitur itu.

AFAIK semuanya perlu bekerja dan saya telah melihat tutorial.

Saya akan menggunakan nginx dengan pengaturan pengujian dan profil. Saya memiliki aplikasi LAMP yang khas.

Saya telah membaca bahwa ada orang yang membalikkan proxy dan menyajikan file statis dari nginx dan meneruskan semua yang lain seperti PHP ke instance Apache yang sedang berjalan. Mereka mengklaim pengorbanan yang baik. Saya tidak memiliki data kinerja tentang itu, tetapi Anda mungkin ingin tahu.

deploymonkey
sumber
2
Menonaktifkan htaccess menimpa apache karena alasan kinerja adalah hal biasa, mendukung fitur seperti itu di server yang dirancang untuk kinerja tinggi tidak masuk akal.
theotherreceive
Terima kasih telah menambahkan pernyataan itu. OP bukan admin pro, jadi kita harus jelas.
deploymonkey
1

Saya punya masalah serius dengan mod_proxy Apache pada berbagai platform di berbagai lingkungan yang berbeda selama beberapa tahun terakhir. Dari waktu ke waktu, itu hanya akan berhenti bekerja dan satu-satunya obat tampaknya adalah me-restart server Apache.

Secara pribadi, saya tidak akan bertanya "nginx vs Apache", tetapi "nginx vs lighttpd" - dan itu panggilan yang jauh lebih sulit!

Mo.
sumber
Argumen yang valid, tetapi terakhir kali saya memeriksa, lighttpd masih memiliki bug yang luar biasa dan telah dinobatkan karena kebocoran memori. Disarankan untuk penyebaran produksi oleh admin. Apakah ini sudah berubah?
deploymonkey
Ini memiliki peringatan, tentu saja (terutama di mana melayani file yang sangat besar), tetapi secara signifikan lebih stabil daripada Apache sebagai proxy - Saya tidak punya masalah nyata dalam beberapa penyebaran dalam enam bulan terakhir
Mo.
Saya telah menghapus lighttpd dari daftar kandidat karena beberapa alasan yang terlupakan :)
mhd