Установка Nginx и Apache в связи в CentOS

Установка  Nginx и Apache в связи в CentOS

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

Данная связка очень часто используется для обеспечения работы больших ресурсов с очень большей посещаемостью на сайте, но если ресурс с маленькой посещаемостью, то данная связка не даст нормального роста производительности и в своей теме «Установка  Nginx и Apache в связи в CentOS» я расскажу и покажу как можно это сделать.

Установка nginx

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

Я писал статью по этой теме, по этому Вы можете легко найти:
1. Установка и подключения репозитория EPEL

2. Установка centalt для centos

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

# yum install nginx

Я сейчас сделаю так, чтобы веб-сервер nginx автоматически стартовал при запуске ОС. Для этого:

# chkconfig nginx on

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

Следующим этапом будет — коректировка файла конфигурации на сервере nginx:

# vim  /etc/nginx/nginx.conf
user nginx;
error_log /var/log/nginx/error.log debug;
pid /var/run/nginx.pid;
worker_rlimit_nofile auto; # С версии 1.3 нужно порекомендовать ставить 'auto', если не будет работать, задаем число

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;

# немного тюнинга
sendfile on; 
tcp_nopush on; 
server_tokens off; 
keepalive_timeout 65; 
# включим сжатие данных до отправкой
gzip on; 
gzip_static on; 
gzip_comp_level 5; 
gzip_min_length 1024;

# можно подключить директорию для всех наших конфигов (виртуальных хостов), но я закомментирую ее т.к использую всего 1 сайт
# include /etc/nginx/conf.d/*.conf;

server {
listen 212.66.44.35; #212.66.44.35 нужно сделать замену на IP адрес сервера
# за вместо 212.66.44.35 указывается имя Вашего сайта (у меня это ИП адрес, но вы можете прописать домен)
server_name 212.66.44.35 www.212.66.44.35;
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;
}

location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|js)$ {
root /var/www/212.66.44.35;
}
}
}

Для более нормальной читабельности я его положил в файл и его можно прочитать тут, чтобы скачать выполните (не забудьте переименовать данный файл тогда):

# cd /etc/nginx/
# wget http://linux-notes.org/wp-content/uploads/files/apache_nginx/nginx_for_conjunction_apache_CenOS.conf

Установка Apache2

Веб-серер энжинкс уже установлен и настроен, сейчас установим и настроим apache2 который в списке пакетов имеет имя  httpd и для его установки нужно выполнить:

# yum install httpd

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

Нужно немного подредактировать  конфигурационный файл в apache и привести к такому виду:

# vim /etc/httpd/conf/httpd.conf
[...]
Listen 127.0.0.1:8080
NameVirtualHost 127.0.0.1:8080

<VirtualHost 127.0.0.1:8080>
ServerAdmin webmaster@212.66.44.35
DocumentRoot /var/www/212.66.44.35/
ServerName 212.66.44.35
ErrorLog logs/212.66.44.35-error_log
CustomLog logs/212.66.44.35-access_log common
</VirtualHost>
[...]

Мой рабочий конфиг Вы можете посмотреть тут, можно так же и скачать (но не забудьте переименовать его):

# cd /etc/httpd/conf/
# wget http://linux-notes.org/wp-content/uploads/files/apache_nginx/httpd_for_conjunction_nginx_CenOS.conf

Установка модуля RPAF

Сейчас все запросы к апачу поступают  не от удаленных посетителей, а уже от  nginx, то в итоге IP-адрес посетителя apache будет оприделятся как локальный (127.0.0.1). Собственно, чтобы решить эту проблему нужно установить и настроить модуль RPAF. Расскажу как работает данный модуль:

Собственно, нечего непонятного тут нет, RPAF  берет тело заголовка X-Forwarded-For, который прислал наш  фронтенд (веб-сервер nginx) и делает замену в заголовке REMOTE_ADDR на бекенде (веб-серера apache).

Выполним установку:

# yum install mod_rpaf

У меня этот метод установки почему то не работал, по этому я решил свою проблему немного по другому.

Сначала я поставил пакеты  нужных для работы утилит (http-devel и gcc -это компилятор):

# yum -y install httpd-devel gcc

После чего я перейду в папку src:

# cd /usr/local/src

После этого я скачаю архив с исходным кодом mod_rpaf:

# wget http://drupion.com/sites/default/files/mod_rpaf-0.6.tar_.gz

Распакую данный, скачанный архив следующей командой и перейду в нужную папку для дальнейшей работы:

# tar zxvf 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

Настройка модуля RPAF

Следующим шагом будет настройка модуля, для этого откроем нужный файл и впишем в него некоторые изменения:

# vim /etc/httpd/conf.d/rpaf.conf
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1
RPAFheader X-Real-IP

Все, установка и настройка nginx и apache в связи в CentOS, но остались последние штрихи — нужно перегрузить все сервисы:

# /etc/init.d/httpd restart
# /etc/init.d/nginx restart

На этом, тема «Установка  Nginx и Apache в связи в CentOS» завершена, спасибо что читаете мой блог http://linux-notes.org

Не забываем поставить еще PHP5, базы данных (Mysql, MariaDB, MongoBD, oracle или любую другую), на сайте можно найти многое по различным темам.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.