This version of the page http://www.itl.ua/2008/11/nginx-bystro-i-prosto/ (0.0.0.0) stored by archive.org.ua. It represents a snapshot of the page as of 2009-08-13. The original page over time could change.
Использование nginx - быстро и просто - Компания ИТЛ
24 Ноя 2008 | Инженерам | Dmitry

Использование nginx - быстро и просто

Если нагрузка на Вашем вэб-сайте существенно увеличивается, ряд посетителей могут получать отказы - не загрузаются изображения, слишком большим становится время ожидания загрузки. Когда все пути программной оптимизации связки apache+php+mysql исчерпаны, возникает вопрос - увеличивать мощность сервера или искать программные пути увеличения производительности. Возможность ускорить работу сайта есть - использование быстрого и нетребовательного к ресурсам вэб-сервера nginx.

nginx [engine x] — это HTTP-сервер и почтовый прокси-сервер. Разработка nginx началась весной 2002 года, а осенью 2004 года вышел первый публично доступный релиз. На данный момент nginx работает на нескольких достаточно нагруженных сайтах под FreeBSD и Linux, в том числе на большинстве серверов Рамблера. [источник]

Установить на функционирующий сервер с любым количеством виртуальных хостов достаточно просто. В этом случае лучший режим работы nginx - это вэб-акселлератор (реверсный прокси). nginx принимает запросы от клиентов, статичные (например, отдача изображений, flash-объектов, css-файлов) отрабатывает максимально быстро, в том числе - с использование кэширования данных в памяти. Запросы динамических объектов (страницы, генерируемые php) перенаправляются “бэкэнду” (backend), которым является apache+mod_php.

Мы столкнулись с необходимостью реализовать подобную схему на нашем сервере, который обслуживает блоги на KHARKOV.RU. Рост количества запросов приводил время от времени к клинчу, когда не хватало ресурсов на генерацию страниц, запросы продолжали поступать, а увеличение лимитов и количества процессов apache уже не приводили к желаемому результату.  Были проделаны следующие шаги:

  • apache был перенесен на другой порт (например, 8100 вместо 80)
  • установлен и настроен nginx для приема соединений на стандартный порт 80.

Конфигурация nginx достаточно проста:

user  nobody;
worker_processes  1;

events {
worker_connections  1024;
}

http {
include       mime.types;
default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $gzip_ratio';

#access_log  logs/access.log  main;

sendfile        on; # использование на freebsd снижает нагрузку
keepalive_timeout  65; # больше ставить нет смысла, меньше-можно

gzip  on; # экономим трафик посетителей
gzip_min_length 1000; # слишком маленькие данные не сжимаем - нет смысла
gzip_proxied     expired no-cache no-store private auth;

server {
listen       80;
server_name  _; # принимаем запросы для всех виртуальных хостов
server_name_in_redirect on;
access_log  /var/log/nginx-access.log  main;
location / {
proxy_pass http://127.0.0.1:8100/; # перенаправление запросов на backend
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;
}

error_page   500 502 503 504  /50x.html;
location = /50x.html { # ошибки отдаем локально
root   /usr/local/www/nginx;
}
}
}

Даже такая простая установка позволила снизить нагрузку на сервер на 30%, существенно уменьшить требования к памяти.

В следующих статьях на тему использования nginx мы расскажем об использовании php в режиме FastCGI и прочих используемых нами технологиях.

Ссылки по теме

    3 комментария

    1. Виталик  |  3 апреля 2009 | 17:51 #

      Наконец то руки дошли до веб сервера.
      Установил nginx как ускоритель apache, все латает, в то время как apache еле справлялся с запросами.

    2. Dmitry  |  6 апреля 2009 | 13:10 #

      Именно так. Если не нравится nginx - можно также посмотреть в сторону lighttpd, от тоже использует неблокируемую архитектуру. apache - рудимент, его использовать в современном интеренете на мало-мальски нагруженных сайтах нельзя. Т.е. в идеале уйти от апача на бэкэнде - отрабатывать все nginx.

    3. Dmitry  |  10 июня 2009 | 16:12 #

      Вопрос в сторону nginx
      У нас есть поисковая система по базе с ценами. База хранится в MS SQL весит 50 гиг, лежит на отдельной машине под управлением Windows 2003 Enterprise.

      собственно на другой машине стоит веб-сервер под управлением апач +пхп… запросы приходят на него он отдает форму поиска… и оттуда же направляет в базу даных запросы на получение и возврата результатов к себе.. формирует страницу с результатами и отдает клиенту.

      Как я упоминал - база весит 50 гиг. Памяти в машине с базой 16 гиг.
      Количество httpd -k start держится в пределах 50 штук… после этого начинаются залипания.. никакой грифики людям не отдается все очень просто сделано в виде формы с полями …

      Может ли помочь в этом случае мне нгинкс ???

    Оставить комментарий

    XHTML: Вы можете использовать следующие тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>