The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: nginx, apache, web,  (найти похожие документы)
From: Denis Frolov <http://www.redhat-club.org>; Date: Mon, 22 Sep 2008 17:02:14 +0000 (UTC) Subject: Настройка nginx в качестве front-end к apache Оригинал: http://www.redhat-club.org/Articles/DenisFrolov/Nginx_frontend_apache Задача В связи с большим количеством соединений с 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 нагрузка на сервер существенно сократилась: Load average Cpu Memory Выводы Как мы видим web сервер nginx позволил нам существенно снизить нагрузку на систему без дополнительных затрат на модернизацию сервера т.е. задачу поставленную в начале данной статьи мы выполнили.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Денис (??), 19:01, 21/10/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    mod_rpaf для CentOS/RHEL 5 лежит теперь в основной ветке репозитория redhat-club по адресу http://repo.redhat-club.org/redhat/5/i386/

    SRPMS пакет лежит здесь http://repo.redhat-club.org/redhat/5/SRPMS/

     
  • 1.2, mefish (?), 23:41, 14/05/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А если есть 4 IP ?
    как правильно прописать:
    RPAFproxy_ips 127.0.0.1 192.168.0.1 ?
     
  • 1.3, Egenius (??), 09:44, 17/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ещё вопрос.
    Нужно ли каждый вирт хост прописывать в конфигурации nginx ?
     
     
  • 2.5, gochankot (?), 18:15, 05/11/2009 [^] [^^] [^^^] [ответить]  
  • +/
    да либо делать универсальный конфиг
     
  • 2.6, gochankot (?), 18:32, 05/11/2009 [^] [^^] [^^^] [ответить]  
  • +/
    This... большой текст свёрнут, показать
     
     
  • 3.8, gochankot (?), 16:27, 06/11/2009 [^] [^^] [^^^] [ответить]  
  • +/
    ...

    ># Main Module - directives that cover basic functionality  

    ...

    >error_log         logs/error.log;

    заменить на error_log        /var/log/nginx/error.log;
    >pid        logs/nginx.pid;

    заменить на pid        /var/run/nginx.pid;
    ...

     
  • 3.9, Powar (?), 17:28, 22/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    ># Путь до директории с сайтами "/www"
    ># Имя корневой директории сайта должно совпадать с доменом сайта
    >root  /www/$host;

    Что за глупость? У тебя сайты работают без алиасов?

     
     
  • 4.11, gochankot (?), 10:23, 11/10/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > Что за глупость? У тебя сайты работают без алиасов?

    почему с ними, я это привел как пример, не кто не говорит, что нельзя по другому

     

  • 1.4, Base (?), 22:05, 10/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А почему бы картинки nginx'ом не раздавать?
     
     
  • 2.7, gochankot (?), 19:05, 05/11/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >А почему бы картинки nginx'ом не раздавать?

    описал тут как http://www.opennet.me/openforum/vsluhforumID3/44581.html#6

     

  • 1.10, iceman (??), 13:59, 20/09/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    htaccess host deny allow не работает в этой связке
     
  • 1.12, faf (?), 01:38, 15/12/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    сть небольшой но вредный трабл:

    На Ubuntu server стоит nginx+apache2+php+mysql;

    apache2 прикручен на прослушку 127.0.0.1:81

    Доступ к нгинксу осуществляется через домен trololo.com (к примеру :)

    Теперь непосредственно сам эпик фейл — при заходе (ипользовании) phpmyadmin или phpbb3 в некоторых случаях (например при автоматической переадресации страницы средствами пхп) заменяется адрес на 127.0.0.1

    Тоесть,к примеру, после ввода пароля в пхпмайадмине,вместо того, чтоб отправить меня по адресу trololo.com/phpmyadmin/index.php меня пытается переадресовать по 127.0.0.1:81/phpmyadmin/index.php , что соответственно не очень хорошо.

    RPAF как я понял, отвечает сохранение и передачу ip клиента — индейцу. ОТсюда философский вопрос- что делать и как с этим бороться?

    ЗЫ:Валенками просьба не закидывать если где ступил.

     
     
  • 2.13, анонимус (??), 17:56, 21/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Решить вышеописанную проблему можно следующим образом.

    upstream trololo.com {
            server localhost:81;
    }

    server {
            listen 80;
            server_name trololo.com www.trololo.com;
            location / {
                    proxy_pass           http://trololo.com;
                    proxy_cache one;
                    proxy_cache_valid  200 302  1m;
                    proxy_cache_key  "$host$request_uri $cookie_user";
            }
    }

     

  • 1.14, Seva (??), 23:37, 06/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    стоит связка nginx APACHE2 OC debian 6 Все работает нормально, но есть проблема при индексации яндексом  с одним сайтом, в урл попадает site.ru:8080 на 8080 висит apache, при том что на других сайтах на том же сервере конфигурация virtualhost схожа и такой проблемы не наблюдается. В чем может быть проблема потому что яша индексирует оба варианта и с 8080 и без. нужно убрать 8080 с урл сайта, помогите...
     
     
  • 2.16, gochankot (?), 11:47, 28/05/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > стоит связка nginx APACHE2 OC debian 6 Все работает нормально, но есть
    > проблема при индексации яндексом  с одним сайтом, в урл попадает
    > site.ru:8080 на 8080 висит apache, при том что на других сайтах
    > на том же сервере конфигурация virtualhost схожа и такой проблемы не
    > наблюдается. В чем может быть проблема потому что яша индексирует оба
    > варианта и с 8080 и без. нужно убрать 8080 с урл
    > сайта, помогите...

    внутри server *** {

    proxy_redirect off;

    }

    обычно помогало

     

  • 1.15, Игорь (??), 18:21, 14/05/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А если уже есть файл в той папке и с таким именнем nginx.conf ?
     
  • 1.17, AvdeevValentin (ok), 08:28, 12/12/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Доброго времени суток! Не подскажете почему Apache перестает отвечать когда я прописываю ему Listen 127.0.0.1:80 ? а если прописан просто Listen 80 то все работает.......в этом я считаю заключается моя проблема с настойкой nginx! Спасибо!
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру