Nginx和php安裝及配置八之nginx session的共用

來源:互聯網
上載者:User
本篇文章給大家分享的內容是關於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的安全性不高,雖然它已經加了密,但是還是可以偽造的。

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

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

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

3、session存在memcache或者Redis

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

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

4、nginx中的ip_hash技術能夠將某個ip的請求定向到同一台後端,這樣一來這個ip下的某個用戶端和某個後端就能建立起穩固的session,ip_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,就不能根據ip作hash。譬如使用的是squid為最前端,那麼nginx取ip時只能得到squid的伺服器ip地址,用這個地址來作分流是肯定錯亂的。
2.nginx的後端還有其它方式的負載平衡。

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

相關推薦:

Nginx和php安裝及配置七之nginx負載平衡的5種策略

Nginx和php安裝及配置六之Nginx反向 Proxy和負載平衡部署指南

Nginx和php安裝及配置五之LINUX用PHPIZE安裝PHP GD擴充

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.