- Установка и настройка nginx (1.0.2) + php-fpm (5.3.6) + mysql (5.5.20)+phpmyadmin на Centos
Установка и настройка nginx (1.0.2) + php-fpm (5.3.6) + mysql (5.5.20)+phpmyadmin на Centos
КРАТКО О NGINX
nginx — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах.
Основные функции:
HTTP-серверобслуживание статических запросов, индексных файлов, автоматическое создание списка файлов, кеш дескрипторов открытых файлов;
акселерированное проксирование без кэширования, простое распределение нагрузки и отказоустойчивость;
поддержка кеширования при акселерированном проксировании и FastCGI;
акселерированная поддержка FastCGI и memcached серверов, простое распределение нагрузки и отказоустойчивость;
модульность, фильтры, в том числе сжатие (gzip), byte-ranges (докачка), chunked ответы, HTTP-аутентификация, SSI-фильтр;
несколько подзапросов на одной странице, обрабатываемые в SSI-фильтре через прокси или FastCGI, выполняются параллельно;
поддержка SSL;
экспериментальная поддержка встроенного Perl;
IMAP/POP3-прокси серверперенаправление пользователя на IMAP/POP3-бэкенд с использованием внешнего HTTP-сервера аутентификации;
простая аутентификация (LOGIN, USER/PASS);
поддержка SSL и StartTLS.
Архитектура
В nginx рабочие процессы обслуживают одновременно множество соединений, мультиплексируя их вызовами операционной системы select, epoll (Linux) и kqueue (FreeBSD). Рабочие процессы выполняют цикл обработки событий от дескрипторов. Полученные от клиента данные разбираются с помощью конечного автомата. Разобранный запрос последовательно обрабатывается цепочкой модулей, задаваемой конфигурацией. Ответ клиенту формируется в буферах, которые хранят данные либо в памяти, либо указывают на отрезок файла. Буферы объединяются в цепочки, определяющие последовательность, в которой данные будут переданы клиенту. Если операционная система поддерживает эффективные операции ввода-вывода, такие как writev и sendfile, то nginx применяет их по возможности.
Конфигурация HTTP-сервера nginx разделяется на виртуальные серверы (директива server). Виртуальные серверы разделяются на location’ы (location). Для виртуального сервера возможно задать адреса и порты, на которых будут приниматься соединения, а также имена, которые могут включать для обозначения произвольной последовательности в первой и последней части, либо задаваться регулярным выражением.
location’ы могут задаваться точным URI, частью URI, либо регулярным выражением. location’ы могут быть сконфигурированы для обслуживания запросов из статического файла, проксирования на fastcgi/memcached сервер.
Для эффективного управления памятью nginx использует пулы. Пул — это последовательность предварительно выделенных блоков динамической памяти. Длина блока варьируется от 1 до 16 килобайт. Изначально под пул выделяется только один блок. Блок разделяется на занятую область и незанятую. Выделение мелких объектов выполняется путём продвижения указателя на незанятую область с учётом выравнивания. Если незанятой области во всех блоках не хватает для выделения нового объекта, то выделяется новый блок. Если размер выделяемого объекта превышает значение константы NGX_MAX_ALLOC_FROM_POOL, либо длину блока, то он полностью выделяется из кучи.
Таким образом, мелкие объекты выделяются очень быстро и имеют накладные расходы только на выравнивание.
nginx содержит модуль географической классификации клиентов по IP-адресу. В его основу входит база данных соответствия IP-адресов географическому региону, представленная в виде Radix tree (сжатое префиксное дерево или сжатый бор) в оперативной памяти. nginx предварительно распределяет первые несколько уровней дерева, таким образом, чтобы они занимали ровно 1 страницу памяти. Это гарантирует, что при поиске IP-адреса для первых нескольких узлов при трансляции адреса всегда найдётся запись в TLB.
УСТАНОВКА И НАСТРОЙКА
1) Cоздаём пользователя, группу и папку для будущего сайта (сайтов) groupadd www -g 48 useradd -u 48 -g www www mkdir -p /home/sites/test chmod +w /home/sites/test chown -R www:www /home/sites/test
2) Обновляемся: yum update
3) Установка дополнительных пакетов для удобной настройки: yum install mc nano lynx
и библиотеки для компиляции: yum -y install gcc cpp autoconf automake bison bison-devel cmake libtool m4 gcc-c++ libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers libmcrypt libmcrypt-devel pcre-devel libevent libevent-devel re2c libtool-ltdl libtool-ltdl-devel
4) Отключаем iptables он ещё не конфигурирован и мешает запуску служб service iptables stop
5) Установка nginx cd /tmp wget http://sysoev.ru/nginx/nginx-1.0.2.tar.gz tar -xf nginx-1.0.2.tar.gz
# Подгружаем PCRE библиотеку отвечающую за редиректы и регулярки wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz tar -xf pcre-8.30.tar.gz
# Подгружаем zlib отвечающий за компрессию заголовков и кода отдаваемых сервером страниц wget http://zlib.net/zlib-1.2.6.tar.gz tar -xf zlib-1.2.6.tar.gz
# Переходим в папку с исходниками nginx конфигурируем, компилим и устанавливаем. cd nginx-1.0.2 ./configure --conf-path=/etc/nginx/nginx.conf --with-pcre=/tmp/pcre-8.30/ --with-zlib=/tmp/zlib-1.2.6/ make make install
10) Устанавливаем Mysql 5.5.20 и phpmyadmin cd /tmp wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.20.tar.gz/from/http://mysql.mirrors.ovh.net/ftp.mysql.com/ tar -xf mysql-5.5.20.tar.gz cd mysql-5.5.20 создаём заранее пользователя и группу для мускула: groupadd mysql useradd -r -g mysql mysql
Конфигурируем, компилируем, устанавливаем: cmake . make make install
Задаём права: cd /usr/local/mysql chown -R mysql . chgrp -R mysql . scripts/mysql_install_db --user=mysql chown -R root . chown -R mysql data
Копируем конфигурационый файл в папку /etc cp support-files/my-medium.cnf /etc/my.cnf
Устанавливаем сервис, назначаем права, добавляем в автозапуск и запускаем: cp support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld chkconfig --levels 235 mysqld on service mysqld start
PhpMyAdmin wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
Проверяем что скачали пакет без ошибок: rpm -K rpmforge-release-*.rpm
Устанавливаем пакет: rpm -i rpmforge-release-*.rpm yum install phpmyadmin Устанавливаем доступ с определенных ip: nano /etc/httpd/conf.d/phpmyadmin.conf # # Web application to manage MySQL # Order Deny,Allow Deny from all Allow from 127.0.0.1 192.168.0.0/24
Alias /phpmyadmin /usr/share/phpmyadmin Alias /phpMyAdmin /usr/share/phpmyadmin Alias /mysqladmin /usr/share/phpmyadmin Правим следующий файл: nano /usr/share/phpmyadmin/config.inc.php
Меняем в нем $cfg['Servers'">[$i">['auth_type'"> = ‘cookies‘; на $cfg['Servers'">[$i">['auth_type'"> = ‘http‘;
Необходимо выставить права на файл: chmod 705 /usr/share/phpmyadmin/config.inc.php
Перезапускаем веб сервер: # service nginx restart
Проверяем:
http://localhost/
Должна показаться страница с phpinfo эту же страницу вы должны увидеть введя внешний IP своего сервера в браузер любого компьютера.
Для того чтобы загрузить phpmyadmin необходимо ввести: http://ip_adress_server/phpmyadmin
, где ip_adress_server - ip-адрес вашего сервера.
11) Что бы вы могли исполнять такие команды как pear pecl php cоздадим символические ссылки для программ из папки /usr/local/php/bin/ в папку /usr/bin/ cd /usr/bin ln -s /usr/local/php/bin/pear pear ln -s /usr/local/php/bin/peardev peardev ln -s /usr/local/php/bin/pecl pecl ln -s /usr/local/php/bin/phar phar ln -s /usr/local/php/bin/phar.phar phar.phar ln -s /usr/local/php/bin/php php ln -s /usr/local/php/bin/php-config php-config ln -s /usr/local/php/bin/phpize phpize
12) Устанавливаем eAccelerator 0.9.6.1 wget http://acelnmp.googlecode.com/files/eaccelerator-0.9.6.1.tar.bz2 tar xvjf eaccelerator-0.9.6.1.tar.bz2 cd eaccelerator-0.9.6.1 phpize ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config make make install
Компилятор установит модуль в папку /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so
Создадим папку для кеша, и сделаем её доступной для записи: mkdir /tmp/eaccelerator chmod 777 /tmp/eaccelerator
Перезапускаем php-fpm что бы eaccelerator создал кеш-папки service php-fpm restart
13) Устанавливаем Memchached
В репозиториии лежит последняя версия 1.4.5 memcached, поэтому предлагаю не заморачиваться и ставить memcached из репозитория. yum install memcached libmemcached libmemcached-devel
Теперь нужно установить расширение для php. последняя стабильная версия 2.2.6 stable. wget http://pecl.php.net/get/memcache-2.2.6.tgz tar -xf memcache-2.2.6.tgz cd memcache-2.2.6 phpize ./configure make
make install
Мы создали файл в /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
Нам необходимо подключить модули PEAR, eAccelerator и Memcached к нашему PHP
Добавлять эти переменные можно в любое место конфига
# Рекомендуется для многих скриптов, где вместо short_open_tag = On
# Путь для инклуда PEAR приложений include_path = ".:/usr/local/pear"
# Подключаем eAccelerator extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so" eaccelerator.shm_size="16" accelerator.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="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9"
# Подключаем расширение Memcache extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so"
Перезапускаем php-fpm и проверяем установленные модули service php-fpm restart http://ip_adress_server/
, где ip_adress_server - ip-адрес сервера.