一般負載均衡內容有兩種形式,一種是靜態,另一種是動態,動態網站內容就可能需要進行交互,那么就涉及到session共享的問題。默認PHP是將session存儲在LocalDisk,如果是多台php主機之間進行負載,那么該如何共享session?今天我們就解決這個問題。
session會話共享文件有很多種方式:
分布式文件共享;NFS,NAS文件存儲等。
Nginx負載均衡ip_hash模塊,固定訪客到后端某台服務器。
將session存儲到數據庫中;例如MySQL,Memcached,Redis,Mongodb等。
我個人比較傾向於將session存儲到Redis數據庫,用這種方式來同步session共享,不僅不會加大數據庫的負擔,而且安全性比cookie更高,把session放到內存里面,比從磁盤文件中讀取會快很多。“有人認為;那我把所有的緩存軟件都安裝,速度豈不是更快,那就不是緩存加速了,而演變成了緩存庫了”。
php語言腳本默認不支持對Redis的操作,所以需要安裝第三方phpRedis擴展模塊,讓其支持對Redis的操作,至於如何安裝使用phpRedis,可以參考我前面寫的文章《phpRedis擴展模塊安裝配置使用》。此外這里還需要一台Redis服務器,請參閱《LinuxCentos7 Redis 3.2.9 源碼編譯安裝配置》。
1.修改PHP配置文件php.ini將session存儲到Redis中。
# vim /usr/local/php/etc/php.ini session.save_handler = files ;session.save_path = "N;/path"
修改為:
# vim /usr/local/php/etc/php.ini session.save_handler = files ;session.save_path = "N;/path"
;如果Redis有密碼連接方式 session.save_path = “tcp://10.10.204.66:6379?auth=password”
2.重啟php-fpm服務生效
# systemctl restart php-fpm