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