首頁  >  文章  >  後端開發  >  Nginx和php安裝及設定八之nginx session的共享

Nginx和php安裝及設定八之nginx session的共享

不言
不言原創
2018-04-14 10:05:311387瀏覽

本篇文章給大家分享的內容是關於Nginx和php安裝及配置八之nginx session的共享,有著一定的參考價值,有需要的朋友可以參考一下

##查了有些資料,看了一些別人寫的文檔,總結如下,實作nginx session#的共享

PHP 伺服器有多台,用nginx做負載平衡,這樣同一個IP訪問同一個頁面會被分配到不同的伺服器上,如果session不同步的話,就會出現很多問題,比如說最常見的登入狀態,下面提供了幾種方式來解決session共享的問題:

1、不使用##session# ,換用cookie

session#是存放在伺服器端的,cookie是存放在客戶端的,我們可以把使用者存取頁面產生的session放到cookie裡面,就是以 Cookie為中繼站。你訪問web伺服器A,產生了session然後把它放到cookie裡面,當你的請求被指派到B伺服器時,伺服器##B先判斷伺服器有沒有這個session,如果沒有,再去看看客戶端的cookie裡面有沒有這個session,如果也沒有,說明session真的不存,如果cookie裡面有,就把cookie裡面的sessoin#同步到伺服器B,這樣就可以實作session的同步了。

說明:這個方法實作起來簡單,方便,也不會加大#的負擔,但是如果客戶端把cookie禁掉了的話,那麼session就無從同步了,這樣會給網站帶來損失; cookie的安全性不高,雖然它已經加了密,但是還是可以偽造的。

2session存在資料庫(##MySQL等)中#

php可以設定將session儲存在資料庫中,這種方法是把存放#session的表和其他資料庫表放在一起,如果mysql也做了叢集了話,每個mysql節點都要有這張表,而這張session表的資料表要即時同步。

說明:用資料庫來同步session#,會加上大資料庫的IO,增加資料庫的負擔。而且資料庫讀寫速度較慢,不利於session#的適時同步。

3session#存在memcacheRedis

#memcache可以做分佈式,php設定檔中設定儲存方式為memcache,這樣php自己就會建立一個 session集群,將session資料儲存在memcache中。

說明:以此方式來同步session#,不會加大資料庫的負擔,並且安全性比用 cookie大大的提高,把session放到記憶體裡面,比從檔案中讀取快很多。但是memcache把記憶體分成很多種規格的儲存區塊,有區塊就有大小,這種方式也就決定了,memcache無法完全利用內存,會產生記憶體碎片,如果儲存區塊不足,還會產生記憶體溢位。

4nginx中的ip_hash技術能夠將某個ip的請求導向到同一台後端,這樣一來這個ip下的某個客戶端和某個後端就能建立起穩固的sessionip_hash是在upstream設定中定義的:

[html]view plain  copy


1.   upstream nginx.example.com  
2.       {   
3.                server 192.168.74.235:80;   
4.                server 192.168.74.236:80;  
5.                ip_hash;  
6.       }  
7.       server  
8.       {  
9.                listen 80;  
10.               location /  
11.               {  
12.                       proxy_pass  
13.                      http://nginx.example.com;  
14.               }  
15.   }



ip_hash是容易理解的,但是因為僅僅能用ip這個因子來分配後端,因此 ip_hash是有缺陷的,不能在某些情況下使用:
1.nginx
不是最前端的伺服器。

ip_hash要求nginx一定是最前端的伺服器,否則nginx無法正確ip,就不能根據iphash#。譬如使用的是squid為最前端,那麼nginxip#時只能得到squid的伺服器ip#位址,用這個位址來做分流是肯定錯亂的。
2.nginx
的後端還有其它方式的負載平衡。

假如nginx後端又有其它負載平衡,將請求又透過另外的方式分流了,那麼某個客戶端的請求絕對不能定位到同一台session應用程式伺服器上。這麼算起來,nginx後端只能直接指向應用程式伺服器,或是再搭一個squid,然後指向應用程式伺服器。最好的方法是用 location作一次分流,將需要session的部分請求透過ip_hash分流,剩下的走其它後端去。

相關推薦:

Nginx與php安裝及設定七之nginx負載平衡的5種策略

Nginx和php安裝及設定六之Nginx反向代理與負載平衡部署指南

Nginx和php安裝及設定五之LINUX用PHPIZE安裝PHP GD擴充功能

以上是Nginx和php安裝及設定八之nginx session的共享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn