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


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 082
Репутация
8 199
Связка двух веб-серверов, один из которых выполняет функцию фонтенда (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 - динамические.
 

xatop

old root
Форумчанин
Регистрация
13.03.2013
Сообщения
103
Репутация
185
Установка 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 [URL]http://ru2.php.net/get/php-5.2.14.tar.gz/from/ru.php.net/mirror[/URL]
# tar -xzf php-5.2.14.tar.gz
# fetch [URL]http://php-fpm.org/downloads/php-5.2.14-fpm-0.5.14.diff.gz[/URL]
# 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-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 082
Репутация
8 199
А чем плох вариант использовать Nginx без аппачи?
Ну по моему мнению его очень тяжело настраивать, я например так и не смог настроить этот форум под Nginx без аппачи, скрипт ошибку выдаёт хоть ты тресни, может специфика движка, или что ещё !

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

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