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