Saya punya banyak pertanyaan sehubungan dengan ssl, sesi lokal, dan load balancing yang tampaknya saling berhubungan, jadi saya minta maaf sebelumnya untuk panjang pertanyaan ini.
Saya memiliki situs web yang menggunakan sesi berbasis file. Sifat situs ini adalah sebagian besar adalah http, tetapi beberapa bagian adalah ssl. Saat ini, karena sesi berbasis file, perlu untuk setiap permintaan ssl untuk menekan server yang sama dengan permintaan http sebelumnya.
Karena keterbatasan waktu, saya ingin melakukan hal termudah untuk memuat keseimbangan peningkatan traffic http dan ssl.
Tampaknya ada 2 opsi untuk algoritma balancing lengket:
- berbasis ip
- berbasis cookie
Solusi berbasis ip mungkin akan berfungsi, tetapi algoritma hashing akan berpotensi mengubah server yang dikunjungi pengguna saat server turun atau ditambahkan yang tidak diinginkan dengan pengaturan sesi berbasis file saat ini. Saya juga mengira bahwa secara teknis memungkinkan bagi pengguna untuk secara sah mengubah ips saat menjelajah situs web.
Algoritma berbasis cookie tampaknya lebih baik, tetapi ketidakmampuan untuk memeriksa cookie ketika dienkripsi oleh ssl tampaknya menghadirkan masalah sendiri.
Saya telah googling untuk contoh tentang cara memuat keseimbangan ssl, dan saya tidak bisa menemukan contoh eksplisit pengaturan yang dapat melakukan penyeimbangan beban berbasis cookie DAN yang dapat menangani peningkatan beban ssl dengan menambahkan decoder ssl lain.
Sebagian besar contoh eksplisit yang saya lihat memiliki decoder ssl (biasanya perangkat keras, apache_mod_ssl, atau nginx) duduk di antara klien browser dan penyeimbang beban. Contoh-contoh biasanya memiliki sesuatu seperti ini (dimodifikasi dari http://haproxy.1wt.eu/download/1.3/doc/architecture.txt ):
192.168.1.1 192.168.1.11-192.168.1.14 ------- + ----------- + ----- + ----- + ----- + | | | | | + - + - + + - + - + + - + - + + - + - + - - + | LB1 | | A | | B | | C | | D | + ----- + + --- + + --- + + --- + + --- + apache 4 server web murah mod_ssl haproxy
Bagian decoding ssl dalam contoh di atas tampaknya menjadi hambatan potensial yang tidak dapat diskalakan secara horizontal.
Saya telah melihat haproxy, dan tampaknya memiliki opsi 'mode tcp' yang memungkinkan sesuatu seperti ini, yang memungkinkan Anda untuk memiliki beberapa decoder ssl:
haproxy | ------------- | | ssl-decoder-1 ssl-decoder2 | | ------------------- | | | web1 web2 web3
Namun, dalam pengaturan seperti itu, tampaknya Anda akan kehilangan ip klien karena haproxy tidak men-decoding ssl: https://cloud-support.engineyard.com/discussions/problems/335-haproxy-not-passing-x-forwarded -untuk
Saya juga telah melihat nginx, dan saya juga tidak melihat contoh eksplisit dari ssl-decoder yang dapat diskalakan secara horizontal. Tampaknya ada banyak contoh orang yang memiliki nginx sebagai hambatan potensial. Dan setidaknya tautan ini tampaknya menunjukkan bahwa nginx bahkan tidak memiliki opsi pengaturan seperti-haproxy di mana Anda akan kehilangan ip dengan mengatakan bahwa nginx "tidak mendukung melewatkan koneksi TCP secara transparan ke backend" Bagaimana cara melewati Apache Lalu lintas SSL melalui proxy nginx? .
Pertanyaan:
- Mengapa sepertinya tidak ada lebih banyak contoh pengaturan yang menambahkan lebih banyak decoder ssl untuk menangani peningkatan lalu lintas?
- Apakah karena langkah decoding ssl hanya merupakan hambatan teoretis, dan secara praktis, satu decoder pada dasarnya akan cukup kecuali untuk situs dengan lalu lintas konyol?
- Solusi lain yang mungkin terlintas dalam pikiran adalah mungkin siapa pun dengan kebutuhan ssl yang meningkat seperti itu juga memiliki sesi store yang terpusat, jadi tidak masalah server web mana yang dikunjungi klien pada permintaan berurutan. Kemudian Anda dapat mengaktifkan mod_ssl atau yang setara di setiap server web.
- Solusi haproxy yang dikutip di atas tampaknya bekerja (selain masalah IP klien), tetapi apakah ada yang menemukan solusi penyeimbang beban perangkat lunak berbasis sticky cookie yang akan bekerja dengan meningkatkan jumlah decoder sambil menjaga IP klien, atau mungkin yang secara teknis tidak mungkin (karena Anda harus men-decode permintaan untuk mendapatkan IP klien, dalam hal ini, kami memiliki hambatan dekoder).
Dengan asumsi bahwa semua yang saya katakan adalah benar, ini tampaknya menjadi pilihan saya:
- menggunakan ip hashing (buruk untuk pengguna yang berpotensi mengubah ips, dan untuk skenario skenario penambahan dan pelepasan server)
- gunakan nginx atau mod_ssl sebagai program pertama menyentuh permintaan ssl, ini akan menjadi potensi ssl decoding bottleneck
- gunakan haproxy sebagai program pertama menyentuh permintaan ssl, mendapatkan skalabilitas ssl horizontal, tetapi hidup tanpa ips yang dicatat di tingkat server web untuk permintaan ssl (mungkin sementara ok)
- dalam jangka panjang, bergerak menuju toko sesi seluler atau terpusat, membuat sesi lengket tidak diperlukan