Saya memiliki aplikasi yang berjalan pada dua contoh AWS yang berbeda dan saya ingin mengaktifkan sesi "sticky" atau "persistent" berdasarkan IP sehingga saya dapat memanfaatkan teknologi socket web dengan cara tertentu.
Saya memiliki dua pengaturan berbeda yang melibatkan keduanya menggunakan ip_hash
untuk mengaktifkan sesi lengket ini.
Pada pengaturan pertama, proses aplikasi berjalan pada instance yang sama dengan konfigurasi Nginx. Ini bekerja , sesi tetap seperti yang diharapkan.
upstream my_app {
ip_hash;
# local servers
server 127.0.0.1:3001 weight=100 max_fails=5 fail_timeout=300;
server 127.0.0.1:3002 weight=100 max_fails=5 fail_timeout=300;
keepalive 8;
}
Pada pengaturan kedua, saya menunjuk ke instance eksternal dan mencoba untuk mencapai efek yang sama. Pengaturan ini tidak berfungsi . Dengan kata lain, sesi-sesi tersebut masih dimuat dengan seimbang.
upstream my_app {
ip_hash;
# external servers
server 111.11.11.11:3001 weight=100 max_fails=5 fail_timeout=300;
server 222.22.22.22:3002 weight=100 max_fails=5 fail_timeout=300;
keepalive 8;
}
Apakah saya menggunakan ip_hash
dengan benar? Bagaimana saya bisa mengaktifkan sesi berbasis ip "sticky" untuk server eksternal?
sumber
Jawaban:
Server saya berada di belakang load balancing AWS, jadi saya harus meneruskan header yang benar ke hulu sehingga selalu mencerminkan IP klien. Konfigurasi berikut memperbaiki masalah saya (lihat baris yang dikomentari):
sumber
Menurut dokumentasi Nginx, dukungan sesi Sticky hanya tersedia untuk versi Plus mahal mereka. Saya sudah meneliti alternatif dan semakin dekat saya adalah garpu tua ini yang tidak kompatibel dengan Nginx 1.5+ https://github.com/lusis/nginx-sticky-module
Saya juga telah mencoba membangun modul LUA tetapi tidak ada kait API untuk seleksi rekan, hanya untuk enumerasi dan pemblokiran.
Penyeimbangan Beban Nginx Plus
Memperbarui
Saya telah menemukan modul hebat lainnya, lihat https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src
sumber