2013-08-24 2 views
5

я бегу CentOS 6. Использование Apache для работы с PHP и Nginx для обработки скриптов изображения и CSSMemcache для 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 статус и он работает.
Я всегда получаю сообщение «Не удалось подключиться».
Я попытался изменить значение на «localhost» с «127.0.0.1» - все еще не работает.

$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

Да, я сделал. Я подключился. Escape character is ... –

+0

Является ли демон memcache на том же сервере, на котором вы пытаетесь выполнить код? –

ответ

7

Как вымываются в комментариях, по-видимому вы работаете Security-Enhanced Linux (SELinux), который добавляет дополнительный уровень безопасности на уровне ядра. По моему опыту и использованию я обнаружил, что SELinux добавляет силовое поле вокруг определенных сервисов, чтобы они не могли получить доступ к определенным активам в системе. Например, если я хочу обслуживать содержимое html с /home/src/web, я должен сообщить системе, что для службы httpd доступно доступ к контенту в пути /home/src/web. Для этого я хотел бы выполнить следующую команду:

$ -> setsebool -P httpd_enable_homedirs 1 

В основном, чтобы перекрестная связь между службами, вы должны позволить такой доступ через политику, так же, как «прокол» брандмауэр, чтобы разрешить доступ к конкретному порт, за исключением SELinux, вы не предоставляете доступ к порту, а предоставляете доступ к другой части системы или службы.К счастью для нас, существует несколько встроенных политик, которые мы можем использовать вышеописанную конструкцию setsebool, а не пытаемся определить наши собственные политики, что может быть болью. Для более полного объяснения SELinux проверьте wikipedia page.

Теперь, чтобы ответить на ваши конкретные вопросы:

почему я должен использовать addServer вместо подключения?

addserver() позволит вам добавить несколько ип (или имен хостов) в список, из которого предполагается, что кешированные значения присутствуют, то есть пул серверов memcache. Принимая во внимание, что connect() позволит вам подключаться только к одному указанному серверу.

getsebool httpd_can_network_memcache, он возвращается, должен ли он вернуться?

Да, кажется, что включение этой конкретной установки позволит вам подключиться к кэшу памяти сервера, с поддержкой SELinux, однако на моих производственных серверах я до сих пор он выключен, но иметь следующий набор:

Я считаю, что любой параметр выполнит цель, однако с вышеуказанной настройкой, если у вас есть сервер memcache на другом хосте, httpd все равно может получить к нему доступ.

Вот достойный write-up на pinholing SELinux, чтобы разрешить доступ к службам httpd другим службам.

+0

Mike Purcell возвращает return getsebool httpd_can_network_memcache в моей системе. не могли бы вы мне помочь –

Смежные вопросы