日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx与Serssion一致性问题

發布時間:2024/9/21 Nginx 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx与Serssion一致性问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

http協議是無狀態的,即你連續訪問某個網站100次和訪問1次對服務器來說是沒有區別的,因為它記不住你。那么在一些場合,確實需要服務器記住當前用戶怎么辦?比如用戶登錄郵箱后,接下來要收郵件、寫郵件,總不能每次操作都讓用戶輸入用戶名和密碼,為了解決這個問題,session的方案就被提了出來,事實上它并不是什么新技術,而且不能脫離http協議以及任何現有的web技術

session的常見實現形式是繪畫cookie(session cookie),即未設置過期時間的cookie,這個cookie的默認生命周期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。實現機制是當用戶發起一個請求的時候,服務器會檢查該請求中是否包含sessionid,如果未包含,則系統會創造一個名為JESSIONID的輸出cookie返回給瀏覽器(只放入內存,并不存在硬盤中),并將其以HashTable的形式寫到服務器的內存里面;當已經包含sessionid時,服務端會檢查找到與該session相匹配的信息,如果存在則直接使用該sessionid,若不存在則重新生成新的session。這里需要注意的是session始終是由服務端創建的,并非瀏覽器自己生成的。但是瀏覽器的cookie被禁止后session就需要用get方法的URL重寫的機制或使用POST方法提交隱藏表單的形式來實現。

session共享

首先我們應該明白,為什么要實現共享,如果你的網站是存放在一個機器上,那么是不存在這個問題的,因為會話數據就在這臺機器上,但是如果你使用負載均衡吧請求分發到不同的機器呢?這個時候會話id在客戶端是沒有問題的,但是如果用戶的兩次請求到了兩臺不同的機器上,而它的session數據可能存在其中一臺機器,這個時候就會出現取不到session的情況,那么如何實現session的共享就成了一個問題

  • session一致性解決方案

    • IP綁定
      • nginx的ip_hash實現,同一個ip的調度
    • session黏性
      • Tengine支持,同一個session的調度
    • session復制集群
      • Tomcat 本身帶有復制session的功能(實現比較復雜,有興趣自己查閱相關資料,使用比較少)
    • 共享session
      • 需要轉么管理session的軟件,msm(memcached-session-manager)
        • memcached緩存服務,可以和tomcat整合,幫助tomcat共享管理session
  • nginx IP綁定配置

upstream backend {server 192.168.214.202:8080;server 192.168.214.203:8080;ip_hash;check interval=3000 rise=2 fall=5 timeout=1000 type=http;check_http_send "HEAD/HTTP/1.0\r\n\r\n";check_http_expert_alive http_2xx http_3xx; }
  • 會話保持(session黏性)
    • ngx_http_upstream_session_sticky_module
    • 該模塊屬于負載均衡模塊,通過cookie實現客戶端與后端服務器的會話保持,在一定條件下可以保證同一個客戶端訪問的都是同一個后端服務器。
    • mode 設置cookie的模式
      • insert:在回復本模塊通過set-Cookie頭直接插入相應名稱的cookie。
      • prefix:不會生成新的cookie,但會在響應的coolie值前面加上特定的前綴,當瀏覽器帶著這個有特定標識的cookie再次請求時,模塊傳給后端服務前先刪除加入的前綴,后端服務拿到的還是原來的cookie值,這些動作對后端透明。如:“Coolie:Name=SRV~VALUE”。
      • rewrite:使用服務端標識覆蓋后端設置的用于session sticky的cookie。如果后端服務在響應頭中沒有設置該cookie,則認為該請求不需要進行session sticky,使用這種模式。后端服務可以控制哪些請求西藥session sticky,哪些請求不需要
      • tengine 具有session sticky功能
upstream backend {server 192.168.214.202:8080;server 192.168.214.203:8080;session_sticky;check interval=3000 rise=2 fall=5 timeout=1000 type=http;check_http_send "HEAD/HTTP/1.0\r\n\r\n";check_http_expert_alive http_2xx http_3xx; } #### insert + indirect模式 #### option ### - indirect:不會將session sticky的cookie傳送給后端服務 ### - direct:與indirect相反 upstream backend {server 192.168.214.202:8080;server 192.168.214.203:8080;session_sticky cookie=mysid fallbak=on path=/ mode=insert option=indirect;check interval=3000 rise=2 fall=5 timeout=1000 type=http;check_http_send "HEAD/HTTP/1.0\r\n\r\n";check_http_expert_alive http_2xx http_3xx; } server {location / {session_sticky_hide_cookie upstream=backend;proxy_pass http://backend;} }

轉載于:https://my.oschina.net/rosetta/blog/745210

總結

以上是生活随笔為你收集整理的Nginx与Serssion一致性问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。