nginx
Последнее изменение этой страницы: 19:25, 20 июля 2016.
64px | |
Создатели: | Игорь Сысоев |
---|---|
Разработчики: | NGINX, Inc и Игорь Сысоев |
Выпущена: | 4 October 2004 года |
Постоянный выпуск: | 1.11.0 / 24 May 2016 года |
Состояние разработки: | активное |
Написана на: | C |
Операционная система: |
Unix-подобные операционные системы, Windows и OS X |
Лицензия: | BSD-like, имеется коммерческая поддержка |
Веб-сайт |
nginx |
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
- Rutracker.org
- 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 Гуса Робертсона.
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.