Monday, September 25th, 2017

Настройка nginx в качестве front-end к apache

Published on Март 30, 2009 by   ·   Комментариев нет

Задача

В связи с большим количеством соединений с WEB сервером Apache встала
проблема нехватки системных ресурсов на сервере. Для дальнейшей
эффективной работы сервера без дополнительных затрат на модернизацию
аппаратной составляющей, встала задача по оптимизации использования
существующих системных ресурсов.

Для выполнения поставленной задачи было проведено тестирование модели
front end/back end системы при которой в качестве front end выступает
легкий web сервер nginx, а в качестве back end выступал все тот же
apache.

Преимущества подобной схемы можно понять на небольшом примере.
Представьте себе, что к вашему web серверу apache необходимо обслужить
порядка 1000 запросов одновременно, причем многие из этих клиентов
подключены к медленным каналам связи. В случае использования apache мы
получим 1000 процессов httpd на каждый из которых будет выделена
оперативная память, и эта память не освободится до тех пор, пока клиент
не получит запрошенный контент (в идеальном варианте конечно).

В случае схемы с применением front end/back end сервера получим
значительную экономию системных ресурсов за счет того, что после того
как пришел запрос клиента, nginx передает запрос apache и быстро
получает ответ. В итоге apache после того как отдал ответ nginx
освобождает память, далее с клиентом взаимодействует web сервер nginx,
который как раз и написан для раздачи статического контента, большому
количеству клиентов, при незначительном потреблении системных ресурсов.

Установка Nginx

Red Hat Enterprise Linux 4 / CentOS 4

Для установки Nginx в этих операционных системах вам необходимо
подключить дополнительный репозиторий пакетов EPEL для этого выполните:

 rpm -ihv http://download.fedora.redhat.com/pub/epel/4/i386/epel-release-4-9.noarch.rpm

Затем установите Nginx выполнив:

 yum install nginx

Red Hat Enterprise Linux 5 / CentOS 5

Для установки Nginx в этих операционных системах вам необходимо
подключить дополнительный репозиторий пакетов EPEL для этого выполните:

rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

Затем установите Nginx выполнив:

 yum install nginx

ASPLinux Server 5

Nginx присутствует в стандартной поставке дистрибутива, поэтому для
установки просто выполните:

  yum install nginx

Fedora

Nginx присутствует в стандартном репозитории дистрибутива, поэтому для
установки просто выполните:

 yum install nginx

Установка Apache

Для установки apache выполните :

  yum install httpd

Установка mod_rpaf

Данный модуль для apache необходим для работы связки nginx —
front-end/apache — back-end. Необходимость в данном модуле возникает по
следующей причине: запросы к apache приходят с ip адреса на котором
работает nginx (в простейшем случае это тот же самый адрес на котором
работает apache), соответственно в журнальных файлах apache будет
фигурировать только ip nginx сервера, что не очень хорошо. Также без
использования данного модуля начнутся проблемы со скриптами в которых
используется ip адрес посетителя и перестанет правильно работать
механизм ограничения доступа по ip адресам с помощью .htaccess.

Домашняя страница модуля http://stderr.net/apache/rpaf/download/ .
Был собран srpm пакет данного модуля для того, чтобы пользователи Red
Hat based дистрибутивов могли легко собрать готовый rpm пакет данного
модуля для своей системы.

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

   rpmbuild -rebuild http://repo.redhat-club.org/old/SRPMS/mod_rpaf-0.6-1.src.rpm

После сборки rpm пакета установите его с помощью команды:

 rpm -ihv /usr/src/redhat/RPMS/i386/mod_rpaf-0.6-1.i386.rpm

Настройка Nginx

Ниже приведен конфигурационный файл nginx для работы в качестве
front-end сервера.

Подразумевается, что nginx будет работать на всех интерфейсах на 80
порту, а apache будет работать на интерфейсе 127.0.0.1 и порту 8080.

Сохраните данный конфигурационный файл в каталоге /etc/nginx/ с именем
nginx.conf

        user  nginx;
        worker_processes  2;
        error_log  /var/log/nginx/error.log debug;
        pid        /var/run/nginx.pid;

        events {
            worker_connections  1024;
         }

        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;
            tcp_nodelay    on;
            server {
                listen       80;
                server_name     _;
                server_name_in_redirect  off;
                access_log  /var/log/nginx/host.access.log  main;
                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;
                 client_body_buffer_size    128k;
                 proxy_connect_timeout      90;
                 proxy_send_timeout         90;
                 proxy_read_timeout         90;
                 proxy_buffer_size          4k;
                 proxy_buffers              4 32k;
                 proxy_busy_buffers_size    64k;
                 proxy_temp_file_write_size 10m;
                 }
                }
        }

Настройка Apache

В файле конфигурации Apache /etc/httpd/conf/httpd.conf найдите строку
Listen :80 и замените ее строкой Listen 127.0.0.1:8080

Настройка mod_rpaf

Добавьте модуль mod_praf в файл конфигурации Apache для этого в файл
/etc/httpd/conf/httpd.conf добавьте следующую строку:

 LoadModule rpaf_module modules/mod_rpaf-2.0.so

Затем в этот же файл добавьте строки

        RPAFenable On
        RPAFsethostname Off
        RPAFproxy_ips 127.0.0.1 192.168.0.1
        RPAFheader X-Real-IP

конечно вместо 192.168.0.1 необходимо поставить ваш IP адрес.

Тестирование производительности

Вышеописанная схема была успешно протестирована на сервере на котором
было 150 сайтов. Каждый сайт был описан с помощью директивы
VirtualHost.

После внедрения схемы с участием nginx нагрузка на сервер существенно
сократилась.

Выводы

Как мы видим web сервер nginx позволил нам существенно снизить нагрузку
на систему без дополнительных затрат на модернизацию сервера т.е.
задачу поставленную в начале данной статьи мы выполнили.














































Смотрите также:

Readers Comments (Комментариев нет)




Да человек я, человек! =)

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]