2013-08-24 22 views
5

I m in esecuzione CentOS 6. Utilizzo di Apache per la gestione di php e nginx per gestire script immagini e cssmemcache per PHP - in grado di connettersi

ho installato server di memcached.

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

ho anche installato il modulo per php.

ho creato un nuovo file PHP

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

ho controllato lo stato memcached ed è in esecuzione.
Ricevo sempre "Impossibile connettersi".
Ho provato a cambiare il valore in "localhost" da "127.0.0.1" - ancora non funzionante.

$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"); 

uscita

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

Cosa significa collegare e addserver fare in modo diverso? Qual è il modo migliore di fare?
ma io non sto ottenendo il Ciao Mondo

Ulteriori aggiornamenti sul codice e su questo problema ..

phpinfo sta mostrando memcached.
var_dump ($ memcache-> get ('chiave')); dà

bool(false)

Perché usare la addserver invece di collegare ?

Altro aggiornamento sul codice

$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 

qualche dettaglio in più

getsebool httpd_can_network_memcache

restituisce fuori

Dovrebbe tornare su?

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

hai provato "telnet 127.0.0.1 11211" – fsw

+0

sì, l'ho fatto. mi sono connesso Il carattere di fuga è ... –

+0

Il daemon memcache è in esecuzione sullo stesso server su cui stai tentando di eseguire il codice? –

risposta

7

Come risciacquata nei commenti, sembra si utilizza Security-Enhanced Linux (SELinux) che aggiunge un ulteriore livello di sicurezza a livello di kernel. Nella mia esperienza e utilizzo, ho scoperto che SELinux aggiunge un campo di forza attorno a determinati servizi in modo che non possano accedere a particolari risorse sul sistema. Ad esempio, se voglio pubblicare il contenuto html da /home/src/web, devo dire al sistema che è ok per il servizio httpd accedere al contenuto nel percorso /home/src/web. Per fare questo vorrei eseguire il seguente comando:

$ -> setsebool -P httpd_enable_homedirs 1 

In sostanza, per consentire cross-comunicazione tra i servizi, è necessario consentire tale accesso tramite una politica, molto simile a "pinholing" un firewall per consentire l'accesso ad una specifica porta, eccetto che con SELinux non si concede l'accesso a una porta, ma si concede l'accesso a un'altra parte del sistema o servizio.Fortunatamente per noi, ci sono diverse politiche incorporate che possiamo usare il precedente costrutto setsebool, piuttosto che provare a definire le nostre politiche, il che può essere un problema. Per una spiegazione più completa di SELinux, consulta lo wikipedia page.

Ora per rispondere alle vostre domande specifiche:

Perché dovrei usare addserver invece di connettersi?

addserver() consente di aggiungere più IP (o nomi host) a un elenco da cui si presuppone che siano presenti valori memorizzati nella cache, ovvero un pool di server memcache. Considerando che il connect() consentirà solo di connettersi al singolo server specificato.

getsebool httpd_can_network_memcache, restituisce, dovrebbe riattivare?

Sì, sembra che l'attivazione di questa impostazione specifica vi permetterà di connettersi a un server memcache, con SELinux abilitato, ma sul mio server di produzione ho ancora impostato su off, ma hanno la seguente serie:

Credo che entrambe le impostazioni raggiungeranno l'obiettivo, tuttavia con l'impostazione precedente, se si dispone di un server memcache su un altro host, httpd può ancora accedervi.

Ecco un discreto write-up su Pinin SELinux per consentire l'accesso al servizio httpd ad altri servizi.

+0

Mike Purcell restituisce getsebool httpd_can_network_memcache sul mio sistema. Potete per favore aiutarmi –

Problemi correlati