memcache для php – невозможно подключиться

Я запускаю centos 6. Использование apache для обработки php и nginx для обработки изображений сценариев и css

Я установил сервер 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)} 

Что делает connect и addServer делать по-другому? Какой лучший способ сделать?
Но я не получаю Hello World

Дополнительные обновления кода и по этой проблеме ..

phpinfo показывает memcached.
var_dump ($ memcache-> Get ( 'ключ')); дает

  BOOL (ложь) 

почему я должен использовать 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 

он возвращается

Должен ли он вернуться?

 Примечание: Memcache :: connect (): Сервер 127.0.0.1 (tcp 11211, udp 0) не удалось: Разрешить отказ (13)

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

 $ -> setsebool -P httpd_enable_homedirs 1 

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

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

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

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

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

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

 $ -> setsebool -P httpd_can_network_connect 1 

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

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