ip_hash
文法:ip_hash
預設值:none
使用環境:upstream
當對後端的多台動态應用伺服器做負載均衡時,ip_hash指令能夠将某個用戶端IP的請求通過雜湊演算法定位到同一台後端伺服器上。這樣,當來自某個IP的使用者在後端Web伺服器A上登入後,再通路該站點的其他URL,能夠保證其通路的還是後端Web伺服器A。如果不采用ip_hash指令,假設來自某個IP的使用者在後端Web伺服器A上登入後,再通路該站點的其他URL,有可能被定向到後端Web伺服器B,C...上,由于使用者登入後SESSION資訊是記錄在伺服器A上的,B,C...上沒有,這時就會提示使用者來登入。
使用ip_hash指令無法保證後端伺服器的負載均衡,可能有些後端伺服器接收的請求多,有些後端伺服器收到的請求少,而且設定後端服務權重等方法将不起作用。是以,如果後端的動态應用伺服器能夠做到SESSION共享,還是建議采用後端服務的SESSION共享方式代替Nginx的ip_hash方式。
如果後端伺服器有時要從Nginx負載均衡中摘除一段時間,你必須其标記為“down”,而不是直接從配置檔案中删除或注釋掉該後端伺服器的資訊。代碼示例如6-6:

這樣,當原來為4台後端服務時,摘除backend3.example後,Nginx仍然會按4台伺服器進行哈希。如果直接注釋掉“server backend3.example.com”這行,Nginx就會按照3台伺服器進行重新
哈希,原來被哈希到backend1.example.com的用戶端IP有可能被哈希backend2.example.com伺服器上,原有的SESSION就會失效。