ip_hash使用源地址哈希算法,將同一客戶端的請求總是發往同一個後端服務器,除非該服務器不可用。
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com down; server backend4.example.com; }
ip_hash簡單易用,但有如下問題:
使用sticky_cookie_insert啟用會話親緣關系,這會導致來自同一客戶端的請求被傳遞到一組服務器在同一台服務器。與ip_hash不同之處在於,它不是基於IP來判斷客戶端的,而是基於cookie來判斷。因此可以避免上述ip_hash中來自同一局域網的客戶端和前段代理導致負載失衡的情況。
upstream backend { server backend1.example.com; server backend2.example.com; sticky_cookie_insert srv_id expires=1h domain=xxxx.com path=/; }