Установка nginx,eaccelerator и обновление php,mysql,apache на CentOS

Создано Евгений Злобин в октября 8, 2009

nginx apacheДанная публикация является логическим продолжением одной из предыдущих, в которой я описывал установку yum и ISPManager на CentOS.

Зачем нам nginx? Если уж вы читаете статью о том, как установить nginx, то для себя наверняка решили зачем он вам. Более подробно о связке nginx + apache можно почитать в этой статье.

Для начала установим отличный репозиторий

rpm -ihv http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm

Теперь займемся обновлением ПО. Удалим или обновим свой старый php

yum remove php

теперь установим новый

yum install php php-devel php-fpm php-mcrypt php-mssql php-gd php-mysql

Обновим mysql и apache

yum update mysql
yum update httpd

Разберемся с установкой nginx. Первым делом зайдите в панель ISPManager, найдите там ссылку «Возможности» и перейдите по ней. Если в списке присутствует nginx, то просто устанавливаем его путем нажатия на «горящую» лампочку. Если же в списке nginx отсутствует, то действуем следующим образом:

yum install nginx

Для того, чтобы связать ISPManager и nginx очищаем кэш пакетов ISPManager

/usr/local/ispmgr/sbin/pkgctl -D cache

и рестартим ИСП

killall -9 -r ispmgr

Идем в пункт Возможности(Features) панели ISPManager и там устанавливаем Nginx. Теперь рестартуем nginx и apache

service httpd restart
service nginx restart

p.s. хотя можно попробовать активировать его из шелла:

/usr/local/ispmgr/sbin/pkgctl activate nginx

Установка mod_rpaf

Теперь нам потребуется модуль mod_rpaf, т.к. по умолчанию связка nginx+apache для всех IP адресов получаемых через $_SERVER['REMOTE_ADDR'] будет показывать адрес вашего сервера.

Для установки понадобятся пакеты gcc, rpm-build и httpd-devel.

yum install gcc rpm-build httpd-devel

Можно не извращаться и установить mod_rpaf напрямую из репозитория:

yum install mod_rpaf

Либо сделать все ручками. Перейдем к скачиванию и установке самого mod_rpaf

cd /usr/local/src
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xzf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

Проверяем создался ли в директории /etc/httpd/conf.d/ файл rpaf.conf. Если его там нет, то создаем и прописываем следующие строки:

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFproxy_ips 127.0.0.1 xx.xx.xx.xx

где xx.xx.xx.xx – IP адрес вашего сервера. Если на сервере несколько адресов, то прописываем их по аналогии через пробел. Перезапускаем Apache

service httpd restart

В nginx внутри блока http {} должны быть указаны строки:

proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

если вы изменяли nginx.conf, следует перезапустить nginx:

service nginx restart

Проверяем работособность. Создаем php файл со следующим содержимым и на экране у нас должен высветится реальный IP:

<?
echo $_SERVER['REMOTE_ADDR'];
?>

Установка Eaccelerator

Мы уже установили репозитозиторий с centalt, поэтому сразу прописываем

yum install php-eaccelerator

Теперь создаем директорию для кэша eaccelerator (если эта директория уже не создана) и назначаем ей права

mkdir /var/cache/php-eaccelerator
chmod 777 /var/cache/php-eaccelerator

перезапускаем apache

service httpd restart

и проверяем eaccelerator на работоспособность

php -v

Должно высветиться что-то наподобии этого:

PHP 5.2.11 (cli) (built: Sep 29 2009 22:33:25)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator

Скрываем версию php и nginx

Теперь сделаем еще пару хитростей. В файле /etc/php.ini находим директиву expose_php и выставляем ей значение off и таким образом скрываем версию php.

expose_php = Off

Для nginx поступаем следующим образом – в секции http прописываем строку

server_tokens off;

Все теперь версии nginx и php у нас скрыты.

Может быть Вам это интересно?

Тэги: , , , ,

16 отв. в “Установка nginx,eaccelerator и обновление php,mysql,apache на CentOS”

  1. Алексей

    Хорошая статья. Только на мой взгляд с nginx нужно использовать что-то полегче apache. Например, php можно настроить, как fastCGI. Так будет расходоваться меньше памяти. Ведь nginx и ставят, чтобы уменьшить нагрузку на серверы.

  2. Евгений Злобин

    Алексей, если использовать FactCGI, то по большому счету выигрыш будет только в памяти.
    Если с апача убрать обработку статики (чем занимается в данном случае nginx), он довольно шустро обрабатывает скрипты.
    К тому же полностью отказаться от Apache в моем случае нельзя, т.к. ISPManager работает именно на Апаче.
    А вообще есть довольно занимательная статья Котерова http://dklab.ru/chicken/nablas/49.html

  3. Начинаю только изучать CentOs, Надеюсь увидеть интересные статьи…

  4. я тоже только начинаю изучать, мне бы что нить для установки CentOS’а, может кто подкинет, желательно инстррукции на русском

  5. Евгений Злобин
  6. Евгений, спасибо за информацию!

  7. Анатолий

    Всё работает, но после Eaccelerator открывается только index.php. на другие страницы пишет не найден сервер. в чём может быть проблема?

  8. А связка php и mysql после обновления нормально будет работать? или надо по новой настраивать?

  9. Добрый день.
    Установил как тут написано Eaccelerator
    выполняю команду php -v
    выдает:

    Failed loading /usr/lib/php/modules/eaccelerator.so: /usr/lib/php/modules/eaccelerator.so: wrong ELF class: ELFCLASS32
    PHP 5.2.12 (cli) (built: Dec 17 2009 22:42:35)
    Copyright (c) 1997-2009 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
    with Zend Optimizer v3.3.9, Copyright (c) 1998-2009, by Zend Technologies

    - В чем может быть проблема ?

  10. Евгений Злобин

    Руслан, попробуйте удалить zend optimizer и запустить без него. Проблема может заключаться в том, что zend optimizer был установлен ДО eaccelerator

  11. Приветствую..
    У меня тоже такая проблема..
    Установил eaccelerator
    после установки и выставления параметров
    extension=»/usr/lib/php/modules/eaccelerator.so»
    eaccelerator.shm_size=»12″
    eaccelerator.cache_dir=»/tmp/eaccelerator»
    eaccelerator.enable=»1″
    eaccelerator.optimizer=»1″
    eaccelerator.check_mtime=»1″
    eaccelerator.debug=»0″
    eaccelerator.filter=»"
    eaccelerator.shm_max=»0″
    eaccelerator.shm_ttl=»0″
    eaccelerator.shm_prune_period=»1800″
    eaccelerator.shm_only=»0″
    eaccelerator.compress=»1″
    eaccelerator.compress_level=»9″

    система заработала, eaccelerator появился в phpinfo
    в скрипте проверки производительности цмски написали что нужно установить значение eaccelerator.shm_ttl равное больше 0
    поменял и заодно добавил eaccelerator.shm_size=»64″
    после этого браузер выдает 502 Bad Gateway
    а при входе в панель ispmanager пишет Не удалось подключиться к удалённому серверу
    и все..
    подключался через шелл убирал из php.ini подключение eaccelerator
    и ничего не меняется, система встала..
    написал в поддержку, они ответили
    Проблема связана с работой web-сервера apache. При старте apache в логах
    ошибок присутствует следующая информация:

    Failed loading /usr/lib/php5/conf.d/eaccelerator.so:
    /usr/lib/php5/conf.d/eaccelerator.so: cannot open shared object file: No such
    file or directory
    eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel
    allows is 33554432 bytes. Lower the amount of memory request or increase the
    limit in /proc/sys/kernel/shmmax.
    PHP Warning: [eAccelerator] Can not create shared memory area in Unknown on
    line 0
    PHP Fatal error: Unable to start eAccelerator module in Unknown on line 0

    что делать незнаю
    помогите плиз..
    что делать с серваком
    пардон, забыл галочку поставить

  12. Евгений Злобин

    Антон, вот из офф. документации eaccelerator eaccelerator.shm_size

    This setting will allow you to control the amount of shared memory eAccelerator should allocate to cache PHP scripts. The number sets the amount of memory in megabytes. Setting this value to 0 will use the default size.
    eaccelerator.shm_size = «0″

    On Linux the maximum amount of memory a process can allocate is limited by the number set in /proc/sys/kernel/shmmax. Allocating more than this value will result in eAccelerator failing to initialise. The size in this file is given in bytes. You can raise this amount with:
    echo value > /proc/sys/kernel/shmmax

    Where value is the size in bytes you want to use. This value is reset to the default value evertime you reboot, but you can raise it permanently by adding the amount you need in /etc/sysctl.conf. This is done by adding:
    kernel.shmmax = value

  13. Валька

    Вы пытались выделить 65 мегобайт в shared memory, а система вам написала 32 могу только. Лучше этот параметр вооще не трогать. А то что в доке написано – хорошо для выделенного сервера, на виртуальных не пойдет.

  14. Да вроде настроил..
    дал shmmax 128 и выделил акселератору..
    все летать начало, почти эталон производительности битрикса

  15. Спасибо…очень хорошо описал.!!! ;)

  16. Здравствуйте.
    Спасибо за статью!
    Пара вопросов:
    1. Как удалить Zend Optimizer?
    2. Как настроить nginx? а то после рестарта у меня отдается 404

Оставить ответ