回覆列表
  • 1 # 網路圈

    Nginx作為一款專業的反向代理伺服器,由於其效能突出,現在一般中大型網站架構模式中,都會將它作為前置的反向代理伺服器。但在部署反向代理之後,有個問題就來了,那就是如何實現會話保持?

    什麼是會話保持?

    我們知道,HTTP協議本身是無狀態的。什麼意思呢?就是使用者向瀏覽器發出請求後,伺服器預設是無法直接識別使用者的,無法將使用者進行區分,這就會存在很多問題,於是就有了會話機制。

    具體如何實現會話的呢?主要有兩種會話:Cookie會話、Session會話。Session會話是儲存在伺服器端的,然後將SessionID存入Cookie中,使用者下次請求伺服器時,伺服器能夠識別Cookie中的SessionID然後找到對應的Session,這樣伺服器就能識別使用者了。

    反向代理為什麼會導致會話丟失?

    上面說到了,Session是儲存在伺服器端的,當使用了反向代理後,同一使用者的多次請求不能保證都落在同一臺後端伺服器上,這樣使用者瀏覽器中的Cookie即使傳遞到後端伺服器,伺服器也未必能找到對應的Session,於是,會話丟失了!

    使用了反向代理後如何保持會話?

    其實會話保持有很多種解決方案,下面結合我的實際經驗總結一下供大家參考:

    1、Nginx會話保持機制

    Nginx自帶有會話保持機制,常見的有:

    ip_hash:使用源地址雜湊演算法,這樣同一客戶端的請求都會到達同一個後端伺服器;

    sticky_cookie_insert:此演算法基於Cookie來實現的,此模組需要編譯安裝。

    2、會話共享機制

    如果我們讓多個後端節點伺服器的Session保持一致,不就可以解決落地伺服器的會話保持了麼?說得通俗點,我們把Session集中管理,然後各個節點伺服器從這裡取Session,就能保持會話了。

    實現方案很多,比如說:

    Session入庫;

    Session存入NoSQL(Memcache、Redis)中。

  • 中秋節和大豐收的關聯?
  • 賭氣分手並不是真的想分,生日禮物讓她媽媽轉交給她這樣好嗎?