2013-08-24 61 views
5

我米運行的CentOS 6,使用Apache處理PHP和Nginx的處理腳本,圖像和CSS內存緩存爲PHP - 無法連接

我已經安裝了memcached服務器。

PORT="11211" 
USER="memcached" 
MAXCONN="4096" 
CACHESIZE="512" 
OPTIONS="-l 127.0.0.1" 

我也安裝了PHP的模塊。

我創建了一個新的PHP文件

$memcache = new Memcache; 
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect"); 

我檢查了memcached的地位和它正在運行。
我總是收到「無法連接」。
我試圖從'127.0.0.1'將值更改爲'localhost' - 仍然無法正常工作。

$memcache = new Memcache(); 
$memcache->addServer('127.0.0.1', 11211) or die ("Could not connect"); 
var_dump($memcache->getExtendedStats()); 
$memcache->set('key', 'hello world', false, 60); 
echo $memcache->get('key'); 
//$memcache->connect('127.0.0.1', 11211) or die ("Could not connect"); 

輸出

array(1) { ["127.0.0.1:11211"]=> bool(false) }

是什麼連接和addServer有什麼不同?哪個是最好的辦法?
但我不上的代碼,並在此問題得到的Hello World

更多更新..

的phpinfo是顯示memcached的。
var_dump($ memcache-> get('key'));給

bool(false)

我爲什麼要使用addServer的代替連接?在代碼

更多更新

$memcache = new Memcache; 
$memcache->addServer('localhost', 11211); 
echo $memcache->getServerStatus('localhost', 11211); 
output : 1 

//$memcache->set('key', 'hello world') or die("failed to store data"); 
output : failed to store data 

一些細節

getsebool httpd_can_network_memcache

返回關閉

它應該回報?

 
Notice: Memcache::connect(): Server 127.0.0.1 (tcp 11211, udp 0) failed with: Permission denied (13) 
+0

你有沒有試過「telnet 127.0.0.1 11211」 – fsw

+0

是的,我做過。我接通了。轉義字符是... –

+0

是否在試圖執行代碼的同一臺服務器上運行memcache守護程序? –

回答

7

正如在評論中衝出,看來你正在運行安全增強型Linux(SELinux)的,其在內核級別增加了一個額外的安全層。根據我的經驗和使用情況,我發現SELinux圍繞某些服務添加了一個強制字段,以便他們無法訪問系統上的特定資產。例如,如果我想從/home/src/web提供html內容,我必須告訴系統,httpd服務訪問/home/src/web路徑中的內容是可以的。要做到這一點,我會發出以下命令:

$ -> setsebool -P httpd_enable_homedirs 1 

基本上,允許服務之間的交叉通信,你必須允許通過策略這樣的訪問,很像「針孔」防火牆以允許特定的訪問除了使用SELinux之外,您不授予對端口的訪問權限,而是授予對系統另一部分或服務的訪問權限。對我們來說幸運的是,我們可以使用上述setsebool結構來制定一些內置政策,而不是試圖定義我們自己的政策,這可能會很痛苦。有關SELinux更完整的解釋,請查看wikipedia page

現在來回答您的具體問題:

我爲什麼要使用addServer而不是連接?

addserver()將允許添加多個IP(或主機名)的列表,從中假設高速緩存的值都存在,即內存緩存服務器池。而connect()將只允許您連接到單個指定的服務器。

getsebool httpd_can_network_memcache,它返回關閉,它應該返回嗎?

是的,這似乎是打開這個特定的設置可以讓你連接到內存緩存服務器,並啓用SELinux的,但是在我的生產服務器上我還是有它設置爲關閉,但有以下組:

$ -> setsebool -P httpd_can_network_connect 1 

我相信,無論哪種設置都可以實現目標,但是通過上述設置,如果在另一臺主機上有一個memcache服務器,httpd仍然可以訪問它。

這是一個體面的write-up針對SELinux允許httpd服務訪問其他服務。

+0

Mike Purcell在我的系統上返回getsebool httpd_can_network_memcache。你能幫我麼 –