Установка и настройка nginx (1.0.2) + php-fpm (5.3.6) + mysql (5.5.20)+phpmyadmin на Centos

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

6) Необходимо создать сервис, который будет управлять процессом nginx

nano /etc/init.d/nginx

Добавляем код:

#!/bin/sh

#

# nginx - this script starts and stops the nginx daemon

#

# chkconfig:   - 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \

# proxy and IMAP/POP3 proxy server# processname: nginx

# config:      /etc/nginx/nginx.conf

# config:      /etc/sysconfig/nginx

# pidfile:     /var/run/nginx.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

start() {

             [ -x $nginx ] || exit 5

             [ -f $NGINX_CONF_FILE ] || exit 6

             echo -n $"Starting $prog: "

             daemon $nginx -c $NGINX_CONF_FILE

             retval=$?

             echo

             [ $retval -eq 0 ] && touch $lockfile

             return $retval

           }

stop() {

            echo -n $"Stopping $prog: "

            killproc $prog

            retval=$?

            echo

            [ $retval -eq 0 ] && rm -f $lockfile

            return $retval

           }

restart() {

               configtest_q || configtest || return 6

               stop

               start

               }

reload() {

              configtest_q || configtest || return 6

              echo -n $"Reloading $prog: "

              killproc $nginx -HUP

              echo

             }

configtest() {$nginx -t -c $NGINX_CONF_FILE}

configtest_q() {configtest >/dev/null 2>&1}

rh_status() {status $prog}

rh_status_q() {rh_status >/dev/null 2>&1}

# Upgrade the binary with no downtime.

upgrade() {

                  local pidfile="/var/run/${prog}.pid"

                  local oldbin_pidfile="${pidfile}.oldbin"

                  configtest_q || configtest || return 6

                  echo -n $"Staring new master $prog: "

                  killproc $nginx -USR2

                  retval=$?

                  echo

                  sleep 1

                  if [[ -f ${oldbin_pidfile} && -f ${pidfile} ]];  then

                        echo -n $"Graceful shutdown of old $prog: "

                        killproc -p ${oldbin_pidfile} -QUIT

                        retval=$?

                        echo

                        return 0

                 else

                       echo $"Something bad happened, manual intervention required, maybe restart?"

                       return 1

                  fi

               }

case "$1" in

    start)

        rh_status_q && exit 0

        $1

        ;;

    stop)

        rh_status_q || exit 0

        $1

        ;;

    restart|configtest)

        $1

        ;;

    force-reload|upgrade)

        rh_status_q || exit 7

        upgrade

        ;;

    reload)

        rh_status_q || exit 7

        $1

        ;;

    status|status_q)

        rh_$1

        ;;

    condrestart|try-restart)

        rh_status_q || exit 7

        restart

            ;;

    *)

        echo $"Usage: $0 {start|stop|reload|configtest|status|force-reload|upgrade|restart}"

        exit 2

esac

7) Делаем созданный файл исполняемым

chmod +x /etc/init.d/nginx

8) Добавляем сервис в автозагрузку

chkconfig --levels 235 nginx on

9) Конфигурация nginx

nano /etc/nginx/nginx.conf 

user  www;

worker_processes  4;

error_log   /var/log/nginx_error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        /var/log/nginx.pid;
#worker_processes 4;

events {
    worker_connections  4096;
}


http {
    include      mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  /var/log/nginx_access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
    listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  /var/log/nginx_host.access.log  main;

        location /phpmyadmin {

               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/phpmyadmin/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass 184.22.104.84:9000;
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
               }
               location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html$
                       root /usr/share/;
               }
        }

        location /phpMyAdmin {
               rewrite ^/* /phpmyadmin last;
        }

    location / {
            root   /home/sites/test;
            index  index.html index.htm index.php;
        }

    #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
    error_page   500 502 503 504  /50x.html;

        location = /50x.html {
            root   html;
        }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
    #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
    location ~ \.php$ {
            root           html;

            fastcgi_pass   184.22.104.84:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /home/sites/test$fastcgi_script_na$
            include        fastcgi_params;
        }

    # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
    #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configurati$
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;

    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;

   #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EX$
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

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

  • webmoney
  • visa
  • privat
  • liqpay
  • non-cash
  • liberty