nginx

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 19:25, 20 июля 2016.
Версия от 19:25, 20 июля 2016; roman lashmanov (обсуждение | вклад) (413 Request Entity Too Large)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)

nginx
64px
Создатели: Игорь Сысоев
Разработчики: NGINX, Inc и Игорь Сысоев
Выпущена: 4 October 2004 года; 15 years ago (2004-10-04)
Постоянный выпуск: 1.11.0 / 24 May 2016 года; 3 years ago (2016-05-24)
Состояние разработки: активное
Написана на: C
Операционная система:

Unix-подобные операционные системы,

Windows и OS X
Лицензия: BSD-like, имеется коммерческая поддержка
Веб-сайт nginx.org

nginx (engine x) — HTTP-сервер и почтовый прокси-сервер, поддерживаемый UNIX-подобными операционными системами. Игорь Сысоев начал разрабатывать nginx с 2002 года. Изначально проект предназначался для серверов компании Rambler, впоследствии стал использоваться на других серверах. Релиз вышел в 2004 году, и он был в открытом доступе. В настоящее время nginx используется на 6,75% всех существующих доменов по рейтингу Netcraft.

Архитектура и масштабируемость сервера nginx

Рабочие процессы в Nginx одновременно обслуживают множество соединений, обеспечивая их вызовами ОС (операционной системы) epoll (Linux), select и kqueue (FreeBSD). Данные, полученные от клиента, разбираются посредством конечного автомата. Обработку разобранного запроса осуществляет цепочка модулей, задаваемая конфигурацией. Формирование ответа клиенту происходит в буферах, которые могут указывать на отрезок файла или хранить данные в памяти. Последовательность передачи данных клиенту определяется цепочками, в которые группируются буферы. В структурном отношении HTTP-сервер Nginx разделён на виртуальные серверы, которые в свою очередь делятся на location. Виртуальному серверу или директиве можно задать порты и адреса для приёма соединений. Для location можно задать точный URI, часть URI, или регулярное выражение.Для оперативного управления памятью служат пулы, являющиеся последовательностью заранее выбранных блоков памяти. Один блок, выделяемый изначально под пул, имеет длину от 1 до 16 килобайт. Он разделён на области – занятую и незанятую. По мере заполнения последней выделение нового объекта обеспечивается образованием нового блока.

Преимущества nginx

nginx считается очень быстрым HTTP сервером. Вместо Apache или совместно с ним Nginx используют, чтобы ускорить обработку запросов и уменьшить нагрузку на сервер. Дело в том, что огромные возможности, заложенные модульной архитектурой Apache, большинству пользователей не требуются. Платить же за эту невостребованную функциональность приходится значительным расходом системных ресурсов. Для обычных сайтов, как правило, характерно явное «засилье» статичных файлов (изображений, файлов стилей, JavaScript), а не скриптов. Никакого специального функционала для передачи этих файлов посетителю ресурса не требуется, так как задача весьма проста. А, значит, и веб-сервер для обработки таких запросов должен быть простым и легковесным, как Nginx. Географическая классификация клиентов по их IP-адресу производится в nginx посредством специального модуля. Система Radix tree позволяет оперативно работать с IP-адресами, занимая минимум памяти.

Функции nginx

Nginx получил большую известность за счет своей высокой производительности, простой конфигурации, надежности и стабильности, а также достаточного набора функций.

nginx в качестве HTTP-сервера

  • Обработка статического контента, индексные файлы, листинг директорий, кэш дескрипторов открытых файлов;
  • Акселерированное проксирование с кэширование, распределение нагрузки и отказоустойчивостью;
  • Акселерированная поддержка FastCGI серверов с кэшированием, распределением нагрузки и отказоустойчивостью;
  • Модульная структура, поддержка различных фильтров (SSI, XSLT, GZIP, докачка, chunked ответы);
  • Поддержка SSL и расширения TLS SNI;
  • Ip-based или Name-based виртуальные сервера;
  • Работа с KeepAlive и pipelined соединениями;
  • Возможность конфигурирования любых тайм-аутов а так-же количества и размеров буферов, на уровне сервера Apache;
  • Выполнение различных действий в зависимости от адреса клиента;
  • Изменение URI с помощью регулярных выражений;
  • Специальные страницы ошибок для 4хх и 5хх;
  • Ограничение доступа на основе адреса клиента или по паролю;
  • Настройка форматов лог-файлов, ротация логов;
  • Ограничение скорости ответа клиенту;
  • Ограничение количества одновременных подключений и запросов;
  • Поддержка методов PUT, DELETE, MKCOL, COPY и MOVE;
  • Изменение настроек и обновление сервера без остановки работы;
  • Встроенный Perl

nginx в качестве почтового прокси-сервера

  • Форвардинг на IMAP/POP3 бакэнд, используя внешний HTTP сервер аутентификации;
  • Проверка SMTP пользователя на внешнем HTTP сервере аутентификации и форвардинг на внутренний SMTP сервер;
  • Поддержка следующих способов аутентификации:
  • POP3 - USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
  • IMAP - LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;
  • SMTP - AUTH LOGI/ PLAIN/CRAM-MD5;
  • Поддержка SSL;
  • Поддержка STARTTLS и STLS;

Установка nginx

Установка nginx в СentOS

Из-под привилегированного пользователя мы отдаем команду

yum install nginx

После установки вводим команду для запуска

/etc/init.d/nginx start

Можно включить дополнительный сервис в автозагрузку

chkconfig nginx on

Установка nginx в Ubuntu

Из-под привилегированного пользователя мы отдаем команду

apt-get install nginx

Включаем сервис, когда он установится в систему

/etc/init.d/nginx start

Установка nginx в FreeBSD

Устанавливаем из портов

cd /usr/ports/www/nginx
make install clean

Установка nginx в Windows

  • Необходимо скачать zip-архив
  • Находим место его сохранения (например, корень диска С)
  • Разархивируем этот файл
unzip nginx.zip
  • Переходим внутрь каталога
cd nginx
  • Запускаем сервер
start nginx

Если nginx не запустился, нужно смотреть причины в error_log. Если же error_log не создался, то об этом сообщается в Event Log. В настоящее время данное ПО не работает в Windows как сервис.

Способы применения nginx

На отдельному порту/IP

Если ресурс насыщен изображениями или файлами для скачивания nginx можно настроить на отдельном порту или же IP и раздавать через него статичный контент. Чтобы это реализовать, нужно поменять некоторые ссылки на сайте. При большом количестве запросов к статичным файлам целесообразно создать отдельный сервер и установить на нем nginx.

Акселерированное проксирование

При акселерированном проксировании все посетительские запросы поступают к nginx. Запросы на получение статичных файлов (например, картинки, простого HTML, JavaScript или CSS-файла) Nginx обрабатывает самостоятельно. В случае обращения пользователя к тому или иному скрипту он переадресует запрос в ведомство Apache. Код сайта при этом остается неизменным.

Ошибки nginx и их устранение

502 Bad Gateway

Ошибка означает, что NGINX не может получить ответ от одного из сервисов на сервере. Часто она появляется, когда NGINX работает в связке с Apache, Varnish, Memcached или иным сервисом, а также обрабатывает запросы PHP-FPM. Как правило, проблема возникает из-за отключенного сервиса (в этом случае нужно проверить состояние напарника и при необходимости перезапустить его) либо, если они находятся на разныхn серверах, проверить пинг между ними, так как, возможно, отсутствует связь между ними. Также, для PHP-FPM нужно проверить права доступа к сокету. Для этого убедитесь, что в

/etc/php-fpm.d/www.conf

прописаны правильные права

listen = /tmp/php5-fpm.sock
listen.group = www-data
listen.owner = www-data

504 Gateway Time-out

Ошибка означает, что nginx долгое время не может получить ответ от какого-то сервиса. Такое происходит, если сервис, с которым nginx работает в связке, отдаёт ответ слишком медленно. Проблему можно устранить с помощью увеличения времени таймаута. При работе в связке NGINX+Apache в конфигурационный файл можно внести изменения

server {
...
send_timeout 800;
proxy_send_timeout 800;
proxy_connect_timeout 800;
proxy_read_timeout 800;
...
}

413 Request Entity Too Large

Ошибка возникает при загрузке слишком большого файла. Существует ограничение в настройках nginx - до 1 Мб. Для устранения ошибки в nginx.conf нужно найти строку

client_max_body_size 1M;

и заменить значение на нужное. Например, мы увеличим размер загружаемых файлов до 100 Мб.

client_max_body_size 100M;

Популярность nginx

В настоящее время количество сайтов, использующих nginx, возросло до 146 миллионов. Так, по данным Netcraft, он стал третьим по популярности веб-сервером в мире. Среди активных сайтов используется в 15 % случаев, благодаря этому, nginx выходит на второе место после веб-сервера Apache. По данным известного доменного регистратора REG.RU, nginx обрел наибольшую популярность среди доменов .ru, .рф и .su, обслуживая более половины каждого сегмента доменных зон. Наиболее известные проекты, использующие nginx:

  • Рамблер
  • Яндекс
  • Mail.ru
  • Хабрахабр
  • Avito.ru
  • Badoo
  • Вконтакте
  • Qiwi.com
  • Facebook
  • Rutracker.org
  • Instagram
  • Tumblr
  • 2ГИС

и др.

Компания nginx

Для разработки коммерческих продуктов Игорь Сысоев создал в июле 2011 года компанию Nginx. В феврале 2012 компания начала предоставлять коммерческий сервис для клиентов. Были введены три пакета технической поддержки — Premium, Advanced и Essential. Эти пакеты включают в себя установку, повышение производительности, конфигурацию, сопровождение программного обеспечения, реализацию, содействие в проектировании и финальной оптимизации. В декабре 2011 года компания получила $3 миллиона от пула инвесторов. В октябре 2013 года компания получила еще $10 миллионов. Первым инвестором выступил фонд New Enterprise Associates, а соинвесторы Аарон Леви, глава Box.com В декабре 2014 года компанией были получены дополнительные инвестиции в размере $20 миллионов. Возглавил раунд венчурный фонд New Enterprise Associates при участии фондов Index Ventures[en], Runa Capital, E.ventures (бывший BV Capital) и гендиректора Nginx Гуса Робертсона.

Ссылки