Я запускаю 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 другим службам.