一、Memcache簡(jiǎn)介
Memcache是一個(gè)高性能的分布式的內(nèi)存對(duì)象緩存系統(tǒng),通過(guò)在內(nèi)存里維護(hù)一個(gè)統(tǒng)一的巨大的hash表,它能夠用來(lái)存儲(chǔ)各種格式的數(shù)據(jù),包括圖像、視頻、文件以及數(shù)據(jù)庫(kù)檢索的結(jié)果等。簡(jiǎn)單的說(shuō)就是將數(shù)據(jù)調(diào)用到內(nèi)存中,然后從內(nèi)存中讀取,從而大大提高讀取速度。
Memcache是danga的一個(gè)項(xiàng)目,最早是LiveJournal 服務(wù)的,最初為了加速 LiveJournal 訪問(wèn)速度而開(kāi)發(fā)的,后來(lái)被很多大型的網(wǎng)站采用。
Memcached是以守護(hù)程序方式運(yùn)行于一個(gè)或多個(gè)服務(wù)器中,隨時(shí)會(huì)接收客戶端的連接和操作。
二、搭建Memcache服務(wù)
yum install memcached
安裝memcache服務(wù)端
yum -y install php-pecl-memcache
安裝php擴(kuò)展操作memcache
php -m | grep memcache
查看php擴(kuò)展是否安裝成功
memcached -d -m 100 -u root -l x.x.x.x -p 11211 -c 512 -P /tmp/memcached.pid
參數(shù)說(shuō)明:
-d選項(xiàng)是啟動(dòng)一個(gè)守護(hù)進(jìn)程;
-m是分配給Memcache使用的內(nèi)存數(shù)量,單位是MB,我這里是100MB;
-u是運(yùn)行Memcache的用戶,我這里是root;
-l是監(jiān)聽(tīng)的服務(wù)器IP地址我這里指定了服務(wù)器的IP地址x.x.x.x;
-p是設(shè)置Memcache監(jiān)聽(tīng)的端口,我這里設(shè)置了11211,最好是1024以上的端口;
-c選項(xiàng)是最大運(yùn)行的并發(fā)連接數(shù),默認(rèn)是1024,我這里設(shè)置了512,按照你服務(wù)器的負(fù)載量來(lái)設(shè)定;
-P是設(shè)置保存Memcache的pid文件,這里是保存在 /tmp/memcached.pid;
想要結(jié)束memcache進(jìn)程
kill `cat /tmp/memcached.pid`
設(shè)置開(kāi)機(jī)啟動(dòng)
chkconfig memcached on
三、Memcache服務(wù)安全問(wèn)題
Memcache服務(wù)器端都是直接通過(guò)客戶端連接后直接操作,沒(méi)有任何的驗(yàn)證過(guò)程,這樣如果服務(wù)器是直接暴露在互聯(lián)網(wǎng)上的話是比較危險(xiǎn),輕則數(shù)據(jù)泄露被其他無(wú)關(guān)人員查看,重則服務(wù)器被入侵,因?yàn)镸ecache是以root權(quán)限運(yùn)行的,況且里面可能存在一些未知的bug或者是緩沖區(qū)溢出的情況,所以危險(xiǎn)性是可以預(yù)見(jiàn)的。
服務(wù)測(cè)試方法:
telnet *.*.*.* 11211
stats items
如出現(xiàn)上述信息,則說(shuō)明服務(wù)器端是配置了“Memcache服務(wù)”,并且沒(méi)有設(shè)置安全保護(hù)。
四、Memcache服務(wù)安全防范
設(shè)置防火墻是簡(jiǎn)單有效的方式,如果服務(wù)器是放置在公網(wǎng)對(duì)外提供服務(wù)的,并且需要通過(guò)外網(wǎng)IP來(lái)訪問(wèn)Memcache的話,那么可以考慮使用防火墻或者代理程序來(lái)過(guò)濾非法訪問(wèn)。
一般我們?cè)贚inux下可以使用iptables或者FreeBSD下的ipfw來(lái)指定一些規(guī)則防止一些非法的訪問(wèn),比如我們可以設(shè)置只允許我們的Web服務(wù)器來(lái)訪問(wèn)我們Memcache服務(wù)器,同時(shí)阻止其他的訪問(wèn)。
# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 --dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 --dport 11211 -j ACCEPT
上面的iptables規(guī)則就是只允許192.168.0.2這臺(tái)Web服務(wù)器對(duì)Memcache服務(wù)器的訪問(wèn),能夠有效的阻止一些非法訪問(wèn),相應(yīng)的也可以增加一些其他的規(guī)則來(lái)加強(qiáng)安全性。