
Установка 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 или любую другую), на сайте можно найти многое по различным темам.