Устанавливаем и настраиваем связку Nginx+Apache

Тема в разделе "Хостинг и настройка серверов", создана пользователем X-Shar, 27 мар 2013.

↑ ↓
  1. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.811
    Симпатии:
    429
    Пол:
    Мужской
    Репа:
    +963 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Связка двух веб-серверов, один из которых выполняет функцию фонтенда (Nginx), другой - бэкенда (Apache2), предназначена для снижения общей нагрузки на сервер. Достигается это за счет того, что более легкий и не обремененный дополнительным функционалом Nginx первым принимает все запросы пользователей. Он самостоятельно выдает по запросам статический контент (изображения, html-файлы, javascript-скрипты..), не озадачивая этой функцией тяжеловесный Apache, который, в свою очередь, обрабатывает динамический контент. Apache не работает напрямую с пользователем, все их запросы проксируются Nginx, и ему же возвращаются ответы. Так достигается разделение труда: Nginx освобождает Apache от необходимости “общаться” с множеством пользователей и обрабатывать запросы на статику, которая составляет большую часть исходящего трафика. Apache не создает множества дочерних процессов, потребляющих оперативную память.

    Данная связка часто применяется для обеспечения работы крупных ресурсов с большой посещаемостью. Для ресурсов с маленькой посещаемостью такая связка не даст ощутимого прироста производительности.

    Данная статья была протестирована на CentOS 5 и Debian Squeeze. Связка работает в том же виде и на других дистрибутивах, но по причине наибольшей популярности первых, мы будем говорить именно о них. Основная часть данной статьи посвящена CentOS, но различия с Debian заключаются только в названиях пакетных менеджеров и нескольких незначительных моментах. Все особенности установки для Debian описаны в заключительной части данной статьи. Команды и примеры файлов конфигурации, не указанные в этом разделе, подходят для обеих систем.

    Установка nginx:

    Для начала нам необходимо подключить репозитории EPEL и CentALT. Это нужно для того, чтобы мы смогли установить Nginx с поддержкой модуля RPAF и сам модуль для Apache.

    Для подключения этих репозиториев введите в консоли команды:

    Код:
    # для 32-битных ОС
    rpm -ihv http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
    rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm
     
    # для 64-битных ОС
    rpm -ihv http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
    rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm
    Далее, выполните команду установки пакета nginx:

    Код:
    yum install nginx
    В большинстве случаев требуется, чтобы nginx загружался автоматически при запуске сервера. Для этого выполните следующую команду:

    Код:
    chkconfig nginx on
    Debian/Ubuntu

    Для установки пакета в ОС Debian или Ubuntu достаточно выполнить команду в консоли:

    Код:
    apt-get install nginx
    Nginx автоматически будет добавлен в автозагрузку при запуске сервера.

    Конфигурация Nginx

    Следующий этап - изменение файла конфигурации Nginx. Путь к файлу конфигурации: /etc/nginx/nginx.conf

    Наш конфиг файл должен выглядеть примерно так:

    Код:
    user www-data;
    error_log /var/log/nginx/error.log debug;
    pid /var/run/nginx.pid;
    worker_rlimit_nofile 80000;
     
    events {
      worker_connections 2048;
    }
     
    http {
      include /etc/nginx/mime.types;
      default_type application/octet-stream;
      log_format main ‘$remote_addr – $remote_user [$time_local] $status ‘
      ‘»$request» $body_bytes_sent «$http_referer» ‘
      ‘»$http_user_agent» «http_x_forwarded_for»‘;
      access_log /var/log/nginx/access.log main;
     
      server {
        listen    88.88.88.11:80; # 88.88.88.11 нужно заменить на IP Вашего сервера
        # здесь и далее вместо mysite.ru указывается имя Вашего сайта
        server_name mysite.ru www.mysite.ru;
        access_log  /var/log/nginx/host.access.log main;
     
        server_name_in_redirect off;
     
        # Секция ниже описывает параметры, по которых фронтенд обменевается с бэкендом,
        # такие, как адрес бэкенда, параметры прямого редиректа, параметры передачи заголовков,
        # максимальный размер принимаемых файлов и пр.
        location / {
          proxy_pass      http://127.0.0.1:8080/;
          proxy_redirect    off;
          proxy_set_header  Host $host;
          proxy_set_header  X-Real-IP $remote_addr;
          proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
          client_max_body_size 10m;
          proxy_connect_timeout 90;
        }
     
        # Эта секция отвечает за местонахождение и типы статичных файлов, обрабатываемых Nginx.
        # Вы можете добавить по аналогии расширения файлов, которые будут отдаваться Nginx'ом.
        # Динамические файлы мы будем отсылать на Apache
        location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|js)$ {
          root /var/www/mysite.ru;
        }
      }
    }
    Установка Apache2

    CentOS

    В списке пакетов для CentOS Apache2 значится как httpd, потому необходимо выполнить следующую команду в консоли:

    Код:
    yum install httpd
    Debian/Ubuntu

    Для Debian/Ubuntu установить Apache нужно командой:

    Код:
    apt-get install apache2
    Конфигурация Apache

    Приводим соответствующую часть файла конфигурации Apache к такому виду:
    Файл конфигурации располагается:
    Debian/Ubuntu: /etc/apache2/apache2.conf
    CentOS: /etc/httpd/conf/httpd.conf

    Код:
     
        Listen 127.0.0.1:8080
        NameVirtualHost 127.0.0.1:8080
     
        <VirtualHost 127.0.0.1:8080>
        # В строке ниже указывается адрес почтового ящика администратора сервера,
        # т. е. Ваш. Имя-пример “mysite.ru” здесь и далее необходимо заменить на имя Вашего сайта
        ServerAdmin webmaster@mysite.ru
        DocumentRoot /var/www/mysite.ru/
        ServerName mysite.ru
        ErrorLog logs/mysite.ru-error_log
        CustomLog logs/mysite.ru-access_log common
        </VirtualHost>
    
    Установка модуля RPAF

    Т.к. теперь все запросы к Apache приходят не от удалённых клиентов, а от Nginx, то в итоге IP-адрес клиента Apache определяет как локальный (127.0.0.1). Для решения этой проблемы нам нужен модуль RPAF. Он берет тело заголовка X-Forwarded-For, присланного от фронтенда (Nginx) и заменяет значение заголовка REMOTE_ADDR на бекенде (Apache).

    CentOS

    Установка в CentOS выполняется следующей командой:

    Код:
    yum install mod_rpaf
    Debian/Ubuntu

    В Debian или Ubuntu установка и включение модуля RPAF в Apache выполняется следующими командами:

    Код:
    apt-get install libapache2-mod-rpaf
    a2enmod rpaf
    Настройка модуля RPAF

    Файл конфигурации RPAF находится:
    Debian/Ubuntu: /etc/apache2/mods-enabled/rpaf.conf
    CentOS: /etc/httpd/conf.d/rpaf.conf
    Он должен содержать следующие строки:

    Код:
    RPAFenable On
    RPAFsethostname Off
    RPAFproxy_ips 127.0.0.1
    RPAFheader X-Real-IP 
    Если у вас установлена ОС CentOS, то в начало этого файла обязательно добавьте строку:

    Код:
    LoadModule rpaf_module modules/mod_rpaf-2.0.so
    Завершение настройки (перезапуск сервисов)

    На этом настройка связки закончена. Теперь нужно только перезапусть Apache и Nginx. Команды перезапуска сервисов различаются для ОС (из-за различий в названиях пакетов).
    Для CentOS выполните команды:

    Код:
    /etc/init.d/httpd restart
    /etc/init.d/nginx restart
    Для Debian и Ubuntu команды будут следующие:

    Код:
    /etc/init.d/apache2 restart
    /etc/init.d/nginx restart
    Теперь связка работает, Nginx обрабатывает статичные данные, Apache - динамические.
     
    • Мне нравится Мне нравится x 2
  2. xatop old root
    xatop
    Ответить в чате

    Форумчанин

    Регистрация:
    13.03.2013
    Сообщения:
    108
    Симпатии:
    359
    Пол:
    Мужской
    Репа:
    +359 / 0 / -0
    Установка nginx, mysql, php-fpm, memcache, eaccelerator на FreeBsd

    Код:
    # portsnap fetch update
    Устанавливаем nginx, можно поставить свежую версию (nginx-devel), а можно последнюю стабильную, что и сделаем:
    Код:
     # cd /usr/ports/www/nginx 
    Иногда необходимо отметить следующие пункты:
    Код:
     [X] HTTP_MODULE
    [X] HTTP_PERL_MODULE
    [X] HTTP_REWRITE_MODULE
    а если нужна поддержка SSL, то и
    [X] HTTP_SSL_MODULE 
    устанавливаем его:
    Код:
     # make install clean
    # rehash 
    Добавим его теперь в автозагрузку:
    Код:
     # echo 'nginx_enable="YES"' >> /etc/rc.conf 
    Файл настроек: /usr/local/etc/nginx/nginx.conf
    Корневая папка сервера: /usr/local/www/nginx/
    Настроим его позже, сейчас поставим мускул.
    Код:
     # cd /usr/ports/databases/mysql51-server/
    # make install clean 
    Устанавливаем БД:
    Код:
     # /usr/local/bin/mysql_install_db 
    Выставляем права на папку с БД:
    Код:
     # chown -R mysql /var/db/mysql/ 
    Запускаем мускул:
    Код:
     # /usr/local/etc/rc.d/mysql-server onestart 
    Устанавливаем пароль на рута:
    Код:
     # /usr/local/bin/mysqladmin -u root password 'пароль' 
    Ставим его в автозагрузку:
    Код:
     # echo 'mysql_enable="YES"' >> /etc/rc.conf 
    Устанавливаем php:
    Код:
     # cd /usr/ports/lang/php52
    # make install clean 
    Ставим необходимые нам расширения:
    Код:
     # cd /usr/ports/lang/php52-extensions/
    # make install clean 
    Установка PHP-FPM:
    Код:
     # cd /tmp
    # fetch http://ru2.php.net/get/php-5.2.14.tar.gz/from/ru.php.net/mirror
    # tar -xzf php-5.2.14.tar.gz
    # fetch http://php-fpm.org/downloads/php-5.2.14-fpm-0.5.14.diff.gz
    # gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1
    # cd php-5.2.14
    # ./configure --enable-fastcgi --enable-fpm
    # make all install
    # cp /tmp/php-5.2.10/sapi/cgi/fpm/php-fpm /usr/local/etc/rc.d/
    # chmod +x /usr/local/etc/rc.d/php-fpm 
    Проверим версию php после установки:
    Код:
     php -v
    PHP 5.2.14 (cli) (built: Feb 1 2011 22:53:19)
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies 
    Если «built» сегодняшний, то всё ок.
    Как всегда, добавляем его в автозагрузку:
    Код:
     # echo 'php_fpm_enable="YES"' >> /etc/rc.conf 
    Добавляем поддержку php в nginx, для этого открываем файл /usr/local/etc/nginx/nginx.conf, чистим его, и добавлем следующие строки:
    Код:
     user www;
    worker_processes 2;
    events {
    worker_connections 1024;
    }
    http {
    include mime.types;
    default_type application/octet-stream;
    # log options
    log_format main '$remote_addr - $remote_user [$time_local] '
    '"$request" $status $bytes_sent '
    '"$http_referer" "$http_user_agent" '
    '"$gzip_ratio"';
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    server_tokens off;
    fastcgi_intercept_errors on;
    server {
    listen 80;
    server_name localhost;
    charset utf-8;
    location / {
    root /usr/local/www/nginx;
    index index.php index.html index.htm;
    }
    location ~* \.(jpg|jpeg|gif|png|ico|css|zip|js|swf)$ {
    root /usr/local/www/nginx;
    }
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root /usr/local/www/nginx-dist;
    }
    location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /usr/local/www/nginx$fastcgi_script_name;
    include fastcgi_params;
    }
    }
    } 
    Далее редактируем конфигурацию php-fpm. По-дефолту он лежит тут '/usr/local/etc/php-fpm.conf'. Находим в файле строки:
    Код:
     <!-- <value name="user">nobody</value> -->
    <!-- <value name="group">nobody</value> --> 
    И меняем их на:
    Код:
     <value name="user">www</value>
    <value name="group">www</value> 
    Тем самым указав пользователя и группу, под которыми будет крутиться php.
    MEMCACHE
    Ставим расширение memcache:
    Код:
     # cd /usr/ports/databases/pecl-memcache
    # make install clean 
    После чего заходим в файл '/usr/local/etc/php/extensions.ini', где добавляем строчку:
    extension=memcache.so
    EACCELERATOR
    Устанавливаем:
    Код:
     # cd /usr/ports/www/eaccelerator
    # make install clean 
    Аналогично memcache заходим в файл '/usr/local/etc/php/extensions.ini' и добавляем строчку:
    extension=eaccelerator.so
    Создаем папку, где eAccelerator будет хранить свой кэш, задаем владельца www и устанавливаем права:
    Код:
     # mkdir /tmp/eaccelerator
    # chown www /tmp/eaccelerator
    # chmod 0700 /tmp/eaccelerator
    Настраиваем eAccelerator:
    ee /usr/local/etc/php.ini
    [eAccelerator] 
    ; Подключаем модуль
    Код:
     extension="eaccelerator.so" 
    ; Размер кеша, в МБ
    Код:
     eaccelerator.shm_size="16" 
    ; Путь до каталога файлов кеша
    Код:
     eaccelerator.cache_dir="/tmp/eaccelerator" 
    ; Переключатель модуля (1 - вкл и 0 - выкл)
    Код:
     eaccelerator.enable="1" 
    ; Переключатель оптимизатора (1 - вкл и 0 - выкл)
    eaccelerator.optimizer="1"

    ; Добавляет отладочную информацию в лог (1 - вкл и 0 - выкл)
    Код:
     eaccelerator.debug="0" 
    ; Путь до файла лога
    Код:
     eaccelerator.log_file = "/var/log/eaccelerator_log" 
    ; Проверять время модификации файлов кеша для перекомпиляции оных (1 - вкл и 0 - выкл)
    Код:
     eaccelerator.check_mtime="1" 
    ; Фильтр расширений файлов которых надо кешировать. Например, "*.php *.phtml".
    Код:
     eaccelerator.filter="" 
    ; Размер выделяемой памяти, в байтах. Допустимо вводить в формате 10240, 10K, 1M и т.д. При 0 - безлимит
    Код:
     eaccelerator.shm_max="0" 
    ; Время жизни кеша, сек
    Код:
     eaccelerator.shm_ttl="120" 
    ; Период удаления старых данных из памяти, сек (при 0 не удаляет)
    Код:
     eaccelerator.shm_prune_period="0" 
    ; Использовать для кеша только память. При 0 используется диск и память
    Код:
     eaccelerator.shm_only="0" 
    ; Переключатель компресии (1 - вкл и 0 - выкл)
    Код:
     eaccelerator.compress="1" 
    ; Степень сжатия
    Код:
     eaccelerator.compress_level="9" 


    Запускаем php и nginx:
    Код:
     # /usr/local/etc/rc.d/php-fpm start
    # /usr/local/etc/rc.d/nginx start 
    Проверим что мы из этого всего получили, создадим файлик /usr/local/www/nginx/test.php со следующим содержимым:
    Код:
     <!--?php phpinfo(); ?--> 

    и пробуем открыть в браузере по адресу:

    Код:
     http://ваш сервак/test.php 
     
    • Мне нравится Мне нравится x 3
  3. best_musor Пользователь
    best_musor
    Ответить в чате

    Первый уровень

    Регистрация:
    05.04.2013
    Сообщения:
    4
    Симпатии:
    4
    Пол:
    Женский
    Репа:
    +4 / 0 / -0
    А чем плох вариант использовать Nginx без аппачи?
     
    • Мне нравится Мне нравится x 2
  4. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.811
    Симпатии:
    429
    Пол:
    Мужской
    Репа:
    +963 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Ну по моему мнению его очень тяжело настраивать, я например так и не смог настроить этот форум под Nginx без аппачи, скрипт ошибку выдаёт хоть ты тресни, может специфика движка, или что ещё !

    А связка отлично работает, не без касяков конечно, на в целом нормально, жить можно !:)

    З.Ы. Если удастся настроить, то это конечно лучше без всяких связок, Nginx бережно относиться к памяти, что хорошо для высоко посещаемых проектов, да и в плане безопасности гораздо лучше, чем связки...
     
    • Мне нравится Мне нравится x 1

Поделиться этой страницей