
我已經看到使用 nginx 設定負載平衡是挺容易我想嘗試一下。我唯一關心的是會話:如何利用 nginx 將所有後續呼叫從客戶端路由到同一台伺服器以實現會話黏性?
謝謝
答案1
使用 ip_hash 指令
答案2
作為替代方案,你可以看看Nginx 黏性模組
當處理多個後端伺服器時,一個客戶端(瀏覽器)始終由同一後端伺服器提供服務(例如用於會話持久性)有時很有用。
使用 IP 持久性(使用 ip_hash 上游模組)可能不是一個好主意,因為可能會出現許多不同的瀏覽器使用相同的 IP 位址(在代理後面)的情況,並且負載平衡系統將不公平。
使用 cookie 來追蹤上游伺服器使每個瀏覽器都是唯一的。
當黏性模組無法套用時,它會切換回經典的循環上游或傳回「錯誤網關」(取決於 no_fallback 標誌)。
當瀏覽器不支援cookie時,Sticky模組無法套用
答案3
ip_hash是nginx對於session的負載平衡規則。但是,nginx伺服器必須取得真實IP。如果你使用squid作為前端伺服器,那麼,nginx伺服器將會取得squid的IP。接下來,nginx 必須指向真實伺服器。如果 nginx 伺服器之後還有其他負載平衡伺服器,則會話不會在同一個真實伺服器上傳送。