Борьба с 502 bad gateway или как установить xcache на 0.4.2
Итак после долгих мытарств и по мотивам livestreet.ru/blog/questions/5335.html решил написать как установить xcache на LS 0.4.2. Мне установка xcache реально помогла в решении проблемы ошибки 502 и в целом для более стабильной работы сайтов. Итак поехали:
Первым делом убираем memcache и eaccelerator. Я не стал ничего удалять из системы, просто закомментировал в php.ini строки относящиеся к eaccelerator, аналогично в /etc/php5/conf.d/memcache.ini также все закомментировал. Наверное это неправильно, кто знает как совсем удалить отпишитесь в каментах.
Теперь собственно установка xcache:
Установили, теперь настраиваем:
Редактируем секцию админки:
Вместо mOo вписываем свое имя, вместо my_password_md5 — свой админский пароль
Создать себе md5 пароль можно этим скриптом:
Устанавливаем web админку для управления cache:
Создаем файл /opt/xcacheadmin/apache.conf с таким содержимым:
Подключаем его к apache:
На этом установка xcache в систему закончена, переходим к LS:
Сохраняем framework.zend.com/svn/framework/standard/trunk/library/Zend/Cache/Backend/Xcache.php в каталог engine/lib/external/DklabCache/Zend/Cache/Backend
Слегка редактируем файл Xcache.php, первые две строчки приводим к виду:
Редактируем engine/modules/cache/Cache.class.php
После
Перед
добавляем
В следующую ниже конструкцию также добавляем xcache так:
В основной конфиг прописываем
Админка xcache находится по адресу
Перезапускаем сервер и радуемся стабильной работе, теперь можно забыть про 502 bad gateway. Не знаю как кому но мне реально помогло полностью избавиться от этой проблемы. Предлагаю разработчикам LS включить поддержку xcache в движок, ибо мой пример очень показателен, думаю не лишним будет опция xcache в конфиге. Mmka персональный респект, его совет избавил меня от глюков и проблем. Улучшения, комментарии и предложения приветствуются.
Первым делом убираем memcache и eaccelerator. Я не стал ничего удалять из системы, просто закомментировал в php.ini строки относящиеся к eaccelerator, аналогично в /etc/php5/conf.d/memcache.ini также все закомментировал. Наверное это неправильно, кто знает как совсем удалить отпишитесь в каментах.
Теперь собственно установка xcache:
apt-get install php5-xcache
Установили, теперь настраиваем:
nano /etc/php5/apache2/conf.d/xcache.ini
Редактируем секцию админки:
[xcache.admin] xcache.admin.enable_auth = On # Configure this to use admin pages xcache.admin.user = "mOo" ; xcache.admin.pass = md5($your_password) xcache.admin.pass = "my_password_md5"
Вместо mOo вписываем свое имя, вместо my_password_md5 — свой админский пароль
Создать себе md5 пароль можно этим скриптом:
echo '<?php echo md5("ваш_пароль"); php?>' > /var/www/pass.php && lynx http://127.0.0.1/pass.php && rm /var/www/pass.php
Устанавливаем web админку для управления cache:
wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz tar -xf xcache-1.2.2.tar.gz mkdir /opt/xcacheadmin && cp xcache-1.2.2/admin/* /opt/xcacheadmin
Создаем файл /opt/xcacheadmin/apache.conf с таким содержимым:
Alias /xcacheadmin /opt/xcacheadmin <Directory /usr/share/phpmyadmin> Options Indexes FollowSymLinks DirectoryIndex index.php </Directory>
Подключаем его к apache:
ln -n /opt/xcacheadmin/apache.conf /etc/apache2/conf.d/xchacheadmin.conf
На этом установка xcache в систему закончена, переходим к LS:
Сохраняем framework.zend.com/svn/framework/standard/trunk/library/Zend/Cache/Backend/Xcache.php в каталог engine/lib/external/DklabCache/Zend/Cache/Backend
Слегка редактируем файл Xcache.php, первые две строчки приводим к виду:
require_once (LS_DKCACHE_PATH.'Zend/Cache/Backend/Interface.php'); require_once (LS_DKCACHE_PATH.'Zend/Cache/Backend.php');
Редактируем engine/modules/cache/Cache.class.php
После
define('SYS_CACHE_TYPE_MEMORY','memory');добавляем
define('SYS_CACHE_TYPE_XCACHE','xcache');
Перед
} else { throw new Exception("Wrong type of caching: ".$this->sCacheType." (file, memory)"); }
добавляем
} elseif($this->sCacheType==SYS_CACHE_TYPE_XCACHE) { require_once(LS_DKCACHE_PATH.'Zend/Cache/Backend/Xcache.php'); $aConfigMem=Config::Get('xcache'); $oCahe = new Zend_Cache_Backend_Xcache(array()); $this->oBackendCache = new Dklab_Cache_Backend_TagEmuWrapper(new Dklab_Cache_Backend_Profiler($oCahe,array($this,'CalcStats')));
В следующую ниже конструкцию также добавляем xcache так:
} else { throw new Exception("Wrong type of caching: ".$this->sCacheType." (file, memory, xcache)"); }
В основной конфиг прописываем
$config['sys']['cache']['type'] = 'xcache';
Админка xcache находится по адресу
http://ваш сайт.ru/xcacheadmin
Перезапускаем сервер и радуемся стабильной работе, теперь можно забыть про 502 bad gateway. Не знаю как кому но мне реально помогло полностью избавиться от этой проблемы. Предлагаю разработчикам LS включить поддержку xcache в движок, ибо мой пример очень показателен, думаю не лишним будет опция xcache в конфиге. Mmka персональный респект, его совет избавил меня от глюков и проблем. Улучшения, комментарии и предложения приветствуются.
Предлагаем качественную замену матрицы на ноутбуках. Вдохнем вторую жизнь в ваш ноутбук!
32 комментария
Автору огромное спасибо, ночью постараюсь свой тоже перенести на xcache — у самого постоянно зависает сервер из-за eaccelerator'а.
Во первых надо отредактировать файл Xcache.php — там есть 2 недочета в плане путей. Я думаю автор скоро выложит новый исправленный файл — мы говорили уже на эту тему.
Во вторых у меня появлялась ошибка: Решилась изменением настройки в Xcache.ini
Выбираете нужную вам цифру.
в Xcache.php первые 2 строки приводим к виду:
Вторые сутки — ни одной ошибки 502 ни на одном из 6 сайтов, чисто субъективно — быстрее работают.
Работает пошустрее. Посмотрим как будет вести себя под нагрузкой.
xcache.mmap)path="/tmp/xcache" и папку (!) не создавать эту.
Fatal error: Uncaught exception 'Exception' with message 'Wrong type of caching: xcache (file, memory, xcache)' in /var/www/site.com/engine/modules/cache/Cache.class.php:101 Stack trace: #0 /var/www/site.com/engine/classes/Engine.class.php(124): ModuleCache->Init() #1 /var/www/site.com/engine/classes/Engine.class.php(94): Engine->InitModules() #2 /var/www/site.com/engine/classes/Router.class.php(66): Engine->Init() #3 /var/www/site.com/index.php(34): Router->Exec() #4 {main} thrown in /var/www/site.com/engine/modules/cache/Cache.class.php on line 101
Не могу разобраться :(
Хотя на 5.2 все вроде сработало
В конструкцию
внести изменения:
На 5.3 все тоже работает
при конструкции
} elseif($this->sCacheType==SYS_CACHE_TYPE_XCACHE) { выдаёт ошибку
а при
} elseif($this->sCacheType=='SYS_CACHE_TYPE_XCACHE') {
версия php 5.3.3, может ктонибудь подсказать в чём ошибка?
а вот у меня поначалу тоже работала связка с mem + eac. но были падения раз в месяц — непонятно почему. поддержка тоже была в недоумении. поменял на xcache и проблем как не было
на SP стала появляться такая же проблема.
вообще советую ставить на nginx + php5-fpm + xcache. Хотите большей производительности — вам не обойтись без spawn-fastcgi на сокетах. Если сервер на фре, там всё это из портов ставится. реврайты для нгинкса много раз здесь были описаны.
ЗЫ. а вообще я бы советовал ставить cherokee и иметь счастье))
изменил первые 2 строчки
/usr/local/www/apache22/data/site.ru/engine/lib/external/DklabCache/Zend/Cache/Backend/Xcache.php
по данному пути файла нет.
Как ставить на последнюю версию LS можете подсказать?
Настроил, как тут написано и подключил к апачу.
Стоит PHP 5.3 и XCache. Делал все по инструкции, пару дней нормально, потом опять 502 ошибка. Посещалка около 1000 уников. Причем такое вижу только на движке LiveStreet.
На серваке еще с десяток сайтов и на других сайтах в это время все ок.
XCache 1.3.2
PHP 5.3.6 with Suhosin-Patch
nginx 1.0.5
Пробовал разные типы кэширования, отключал кэширование вс равно 502. В лгах апача segmentation failed.
Все остальные сайты работают отлично, только LS такое. Видимо что-то криво у него с XCache