Haruskah Nginx berada di depan HAProxy atau sebaliknya?

11

Saya memiliki sedikit pengalaman dalam desain arsitektur infrastruktur situs web. Saya tahu ini mungkin situasi khusus. Situs web seharusnya:

1) Butuh dukungan HTTPS untuk beberapa halaman (mis. Halaman login) sementara yang lain hanya halaman HTTP.

2) Memerlukan beberapa server web sehingga diperlukan penyeimbangan muatan.

3) Perlu caching dan kompresi HTTP untuk meningkatkan kinerja.

4) Beberapa permintaan (mis. Pengunggahan gambar) harus dialihkan ke server backend khusus. Jadi, diperlukan penyeimbangan berbasis URL.

Saya tahu bahwa NginX dan HAProxy keduanya adalah Proxy Reverse open-source yang bagus dan / atau Load Balancer. Karena HAProxy tidak mendukung SSL, sementara Nginx load balancing tidak sebagus HAProxy. Saya akan mengambil keduanya.

Jadi, haruskah saya meletakkan Nginx (sebagai proxy terbalik) di depan HAProxy (sebagai penyeimbang beban), atau sebaliknya?

Terima kasih

Morgan Cheng
sumber

Jawaban:

7

Jika Anda berencana untuk membuat setiap server web tersedia melalui HTTPS, maka Anda harus menginstal Nginx di depan HAProxy. Dengan konfigurasi itu, Nginx Anda akan menangani semua pekerjaan SSL dan mengirim lalu lintas HTTP yang didekripsi langsung ke frontend HAProxy, yang kemudian akan memuat permintaan keseimbangan ke server web Anda berdasarkan aturan yang Anda tentukan.

Gagasan untuk menggunakan LVS, seperti yang disebutkan oleh womble adalah bahwa itu agak kurang mengganggu karena tidak memiliki koneksi antara server web Anda dan klien yang mengakses situs. Di sisi lain, LVS hanya akan menyediakan Anda dengan load-balancing sederhana dan tidak akan memungkinkan Anda untuk meneruskan permintaan berdasarkan ekstensi file, URL yang diminta, header, dll. Itulah sebabnya HAProxy digunakan dalam banyak situasi.

Jika Anda hanya memerlukan SSL di satu server (tidak seimbang) maka Anda aman menggunakan HAProxy untuk semuanya tanpa menggunakan Nginx. Di sisi lain, Anda akan memiliki satu masalah dengan tidak dapat melihat alamat IP sumber klien di log HTTPS server web (karena HAProxy menulis ulang alamat itu). IP akan berada dalam log HAProxy jika Anda mengaktifkannya;)


sumber
Terima kasih. karena "Beberapa permintaan (mis. pengunggahan gambar) harus dialihkan ke server backend khusus. Jadi, diperlukan penyeimbangan berbasis URL." (saat saya memperbarui pertanyaan). LVS mungkin tidak memenuhi persyaratan saya.
Morgan Cheng
BTW, menyembunyikan alamat IP oleh HAProxy hanya untuk HTTPS, atau untuk HTTP juga?
Morgan Cheng
@Organ, Menyembunyikan ip hanya untuk HTTPS.
Ini hanya untuk backend mode TCP, jadi apa pun yang bukan HTTP tidak akan melihat alamat IP karena dikirim sebagai HTTP Header (X-Forwarded-For).
Tidak persis. Haproxy dapat terhubung ke server menggunakan alamat IP klien, tetapi itu membutuhkan kerja sama kernel (misalnya: fitur TPROXY). Ini harus dihindari sedapat mungkin.
Willy Tarreau
2

haproxy sejak v. 1.5, dirilis pada 2014 , memang mendukung SSL seperti jimat, termasuk SNI.

Karena itu saya akan meletakkan haproxy di depan nginx.

Greg Dubicki
sumber
1

Anda hanya harus menggunakan nginx, ia melakukan semua yang Anda butuhkan sebagai server web frontend. Jika Anda memerlukan front-end load-balancing, gunakan penyeimbang beban L3 seperti Linux Virtual Server , karena tidak menghalangi seperti yang dilakukan HAproxy. Gunakan HAproxy jika diminta untuk melakukan load balancing di belakang layar, seperti menyeimbangkan permintaan ke kumpulan pekerja backend.

womble
sumber
2
Dikatakan bahwa load balancing NginX sederhana, hanya pendekatan round robin. Itulah alasan saya mempertimbangkan HAProxy.
Morgan Cheng
1
Dikatakan dengan benar; Saya sudah mengatakannya sendiri. Itu sebabnya saya tidak menyarankan menggunakan nginx sebagai penyeimbang beban, dan Anda tidak akan menemukan penyebutan menggunakan nginx sebagai penyeimbang beban dalam jawaban saya ini (atau yang lainnya).
womble
Itu hanya jika Anda takut menggunakan kompilasi Anda sendiri dari sumber (atau port di FreeBSD). Ada beberapa modul pihak ketiga yang meningkatkan penyeimbangan muatan: wiki.nginx.org/3rdPartyModules
Martin Fjordvald
2
Tingkatkan ya. Buat yang memadai, tidak. Pikiranku tentang ini dapat ditemukan di hezmatt.org/~mpalmer/blog/2011/07/24/… (cari "tidak cantik").
womble