На чем написан nginx

nginx

nginx (англ. engine x ) (по-русски произносится как э́нджин-и́кс [4] [5] ) — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах (тестировалась сборка и работа на FreeBSD, OpenBSD, Linux, Solaris, Mac OS X, AIX и HP-UX). Начиная с версии 0.7.52 появилась бинарная сборка под Microsoft Windows.

Содержание

Основные функции

nginx — простой, быстрый и надёжный сервер, не перегруженный функциями. Применение nginx целесообразно прежде всего для статических веб-сайтов и как прокси-сервера перед динамическими сайтами. [источник не указан 151 день]

HTTP-сервер

SMTP/IMAP/POP3-прокси сервер

Архитектура

В nginx рабочие процессы обслуживают одновременно множество соединений, мультиплексируя их вызовами операционной системы select, epoll (Linux) и kqueue (FreeBSD). Рабочие процессы выполняют цикл обработки событий от дескрипторов (см. Событийно-ориентированное программирование). Полученные от клиента данные разбираются с помощью конечного автомата. Разобранный запрос последовательно обрабатывается цепочкой модулей, задаваемой конфигурацией. Ответ клиенту формируется в буферах, которые хранят данные либо в памяти, либо указывают на отрезок файла. Буферы объединяются в цепочки, определяющие последовательность, в которой данные будут переданы клиенту. Если операционная система поддерживает эффективные операции ввода-вывода, такие как writev и sendfile, то nginx применяет их по возможности.

Конфигурация HTTP-сервера nginx разделяется на виртуальные серверы (директива server). Виртуальные серверы разделяются на location’ы (location). Для виртуального сервера возможно задать адреса и порты, на которых будут приниматься соединения, а также имена, которые могут включать * для обозначения произвольной последовательности в первой и последней части, либо задаваться регулярным выражением.

location’ы могут задаваться точным URI, частью URI, либо регулярным выражением. location’ы могут быть сконфигурированы для обслуживания запросов из статического файла, проксирования на fastcgi/memcached сервер.

Для эффективного управления памятью nginx использует пулы. Пул — это последовательность предварительно выделенных блоков динамической памяти. Длина блока варьируется от 1 до 16 килобайт. Изначально под пул выделяется только один блок. Блок разделяется на занятую область и незанятую. Выделение мелких объектов выполняется путём продвижения указателя на незанятую область с учётом выравнивания. Если незанятой области во всех блоках не хватает для выделения нового объекта, то выделяется новый блок. Если размер выделяемого объекта превышает значение константы NGX_MAX_ALLOC_FROM_POOL, либо длину блока, то он полностью выделяется из кучи.

Таким образом, мелкие объекты выделяются очень быстро и имеют накладные расходы только на выравнивание.

nginx содержит модуль географической классификации клиентов по IP-адресу. В его основу входит база данных соответствия IP-адресов географическому региону, представленная в виде Radix tree (сжатое префиксное дерево или сжатый бор) в оперативной памяти. nginx предварительно распределяет первые несколько уровней дерева, таким образом, чтобы они занимали ровно 1 страницу памяти. Это гарантирует, что при поиске IP-адреса для первых нескольких узлов при трансляции адреса всегда найдётся запись в TLB.

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

Безопасность

Источник

Что за Nginx, о котором сейчас все говорят

На чем написан nginx. Смотреть фото На чем написан nginx. Смотреть картинку На чем написан nginx. Картинка про На чем написан nginx. Фото На чем написан nginx

В сети набирает обороты скандал вокруг Rambler и Nginx.

Поисковый гигант пытается получить права на один из самых популярных веб-серверов в мире. Его создал бывший выходец из Рамблера 15 лет назад.

Рассказываем по порядку, что это за компания, и в чем суть «разборок».

Что такое Nginx

На чем написан nginx. Смотреть фото На чем написан nginx. Смотреть картинку На чем написан nginx. Картинка про На чем написан nginx. Фото На чем написан nginx

Nginx — третий по популярности веб-сервер в мире и один из самый успешных российских IT-стартапов. Им пользуется более 447 млн сайтов по всей планете (это почти 40% всех сайтов в мире), включая Яндекс, Facebook, Instagram, Google, Netflix, Adobe, Cloudflare, WordPress.com и многие другие.

Простыми словами: это программа для развертывания собственного веб-сервера. Может использоваться как независимый полноценный сервер, так и прокси с переадресацией веб-запросов на другие сервера.

Этот сервис использует открытый исходный код и доступен любому для редактирования и подстраивания под свои нужды.

На чем написан nginx. Смотреть фото На чем написан nginx. Смотреть картинку На чем написан nginx. Картинка про На чем написан nginx. Фото На чем написан nginx
Примерная схема работы Nginx

Например, когда пользователь делает запрос на открытие страницы сайта, браузер связывается с сервером этой страницы. Затем сервер ищет файлы для страницы и отправляет их в браузер. Одно рабочее соединение может обрабатывать до 1024 запросов.

Nginx одновременно обрабатывает тысячи подобных запросов и распределяет нагрузку на загруженных сайтах, вроде облачных хранилищ, интернет-магазинов, поисковых систем и прочего. За счёт этого он и обрёл свою популярность.

В 2003 году Nginx стали использовать Звуки.ру, эстонский сайт знакомств Rate.ее и российский аналог Mamba. Год спустя на серверы компании перешёл сервис хранения фотографий от Рамблера.

Начал заниматься стартапом выходец из Rambler Group, программист Игорь Сысоев в 2002 году.

Кто такой Игорь Сысоев

На чем написан nginx. Смотреть фото На чем написан nginx. Смотреть картинку На чем написан nginx. Картинка про На чем написан nginx. Фото На чем написан nginx

Это непубличная личность, поэтому информации о нем не так много.

Игорь родился в 1970 году в Казахстане, провёл детство и школьные годы в Алма-Ате. После школы он отправился в Москву поступать в «Бауманку», но не сумел.

Вернувшись на родину, он устроился лаборантом в филиал Института повышения квалификации Министерства геологии СССР. Там на компьютерах «Искра-226» он учился программировать на Basic.

Позднее, в 1994 году, Сысоев всё-таки поступил в Университет им. Баумана и во время обучения написал небольшой антивирус AV. В 2000 году устроился на работу в Rambler.

На чем написан nginx. Смотреть фото На чем написан nginx. Смотреть картинку На чем написан nginx. Картинка про На чем написан nginx. Фото На чем написан nginx

Тогда мужчина администрировал различные сервисы Rambler и заметил, что сервер Apache нельзя отмасштабировать для большого числа посетителей сайта.

В 2002 году из технического интереса решил написать более произоводительный сервер и выкладывать результаты в открытый доступ.

Уже с 2011 года Nginx начала приносить прибыль и захватывать индустрию

На чем написан nginx. Смотреть фото На чем написан nginx. Смотреть картинку На чем написан nginx. Картинка про На чем написан nginx. Фото На чем написан nginx

В 2004 году появилась первая рабочая версия Nginx, а в 2011 Сысоев вместе с партнёром Максимом Коноваловым основал собственный стартап Nginx Inc.

Что происходит прямо сейчас и какое отношение к этому имеет Rambler

На чем написан nginx. Смотреть фото На чем написан nginx. Смотреть картинку На чем написан nginx. Картинка про На чем написан nginx. Фото На чем написан nginx

4 декабря Rambler заявила о своих правах на Nginx и возбудила уголовное дело о нарушении авторских прав. А в офисах компании 12 декабря прошло несколько обысков.

Суть претензии в том, что Сысоев работал над сервисом, будучи сотрудником корпорации. При этом сам разработчик заявляет, что занимался веб-сервером в свободное от работы время.

Бывший исполнительный директор Rambler Group Игорь Ашманов подтвердил, что разработка ПО не входила в обязанности Сысоева, а у компании нет документов, которые могут подтвердить её позицию.

Rambler оценил ущерб в 51,4 млн рублей. Сейчас дело находится в полиции, решается вопрос о его рассмотрении в арбитражном суде. Пока Сысоеву и Коновалову не предъявили обвинений.

Источник

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

nginx

nginx

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

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-сервера

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

Установка nginx

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

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

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

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

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

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

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

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

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

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

Если 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 нужно проверить права доступа к сокету. Для этого убедитесь, что в

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

504 Gateway Time-out

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

413 Request Entity Too Large

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

Источник

Как стартовал Nginx. Игорь Сысоев о разработке знаменитого веб-сервера

На чем написан nginx. Смотреть фото На чем написан nginx. Смотреть картинку На чем написан nginx. Картинка про На чем написан nginx. Фото На чем написан nginx

Как видно из текста постановления, обыск проводился в связи с возбужденным уголовным делом по частям «Б» и «В» статьи 146 УК РФ («Нарушение авторских и смежных прав», пункты «в особо крупном размере» и «группой лиц по предварительному сговору или организованной группой»). В итоге разработчикам и основателям Nginx грозит не только потеря проекта, но и до шести лет лишения свободы.

Суть претензии «Рамблера» состоит в том, что некие «неустановленные лица», в рабочее время и по приказу руководства компании, не позднее 4 октября 2004 года создали «программу для ЭВМ „энджиникс“», а затем, «имея умысел на нарушение авторских прав», опубликовали ее в Сети и принялись распространять, заявляя, что права на нее принадлежат исключительно Игорю Сысоеву — основателю и разработчику Nginx, бывшему сотруднику «Рамблера».

«Мы обнаружили, что исключительное право компании „Рамблер Интернет Холдинг“ на веб-сервер Nginx нарушено в результате действий третьих лиц. В связи с этим «Рамблер Интернет Холдинг» уступила права на предъявление претензий и исков, связанных с нарушением прав на Nginx, компании Lynwood Investments CY Ltd, которая обладает необходимыми компетенциями для восстановления справедливости в вопросе о принадлежности прав», — сообщили в пресс-службе Rambler Group.

Издание «Коммерсант» отмечает, что компания Lynwood Investments связана с совладельцем Rambler Group Александром Мамутом — в частности, через эту компанию бизнесмен владел британской книжной сетью Waterstones.

В Rambler Group оценивают свой ущерб по состоянию на 2011 год в 51,4 миллиона рублей.

Напомним, что в 2011 году Игорь Сысоев покинул «Рамблер» и основал компанию Nginx, которая, помимо свободного ПО, стала предлагать коммерческие продукты. В настоящее время Nginx — это один из самых популярных веб-серверов в интернете, с использованием его работает почти четверть всех сайтов.

Уже к 2018 году выручка Nginx составляла 26 миллионов долларов, и в марте 2019 года Nginx за 670 миллионов долларов приобрела компания F5, один из мировых лидеров в области мультиоблачных сервисов. Команда разработки проекта, включая его основателей Игоря Сысоева и Максима Коновалова, продолжила работу над Nginx уже в составе F5.

Что об этом говорят

Сообщество и российская ИТ-индустрия отреагировали на происходящее с Nginx очень бурно, и многие сочли эти события крайне плохим знаком для российского интернет-бизнеса. Мы собрали некоторые важные реакции и комментарии.

Директор по распространению технологий «Яндекса» Григорий Бакунов aka Bobuk поддержал Сысоева и опубликовал от лица компании официальное заявление, озаглавленное «Open source — наше всё».

Игорь Ашманов, занимавший должность исполнительного директора Рамблера в начале нулевых, заявляет, что не видит перспектив для данного дела. «Никаких служебных заданий, предписывающих разрабатывать такой веб-сервер, не было», — утверждает он. Более того, по словам Ашманова, при найме на работу с Сысоевым было специально оговорено, что у него есть свой проект, которым он имеет право заниматься. Поэтому изложенную в материалах уголовного дела версию он считает «чушью».

Основатель Habr Денис Крючков пишет в Twitter, что «по странному стечению обстоятельств [эту] историю достали после захода Сбера в Рамблер», имея в виду, что в текущем году в акционерной структуре Rambler Group произошли изменения: в августе Сбербанк закрыл сделку по покупке 46,5% компании. Также Крючков напоминает, что сайты мвд.рф и kremlin.ru тоже используют в работе Nginx.

Глава провайдера Diphost и владелец телеграм-канала «Эшер II» Филипп Кулин пишет: «В nginx вложено большое количество кода сторонних людей. Если Рамблеру чудом удастся обнулить свободную лицензию, люди гипотетически смогут потребовать удалить их код из nginx, так как не передавали исключительных прав Рамблеру. И такие найдутся. Сам факт тяжб будет делать продукт токсичным. А выигранные споры — превратят его в кирпич 15-летней давности. В мире ничего не изменится. Скорее всего, решение локального суда будет там признано политически ангажированным».

Американская компания F5 Networks, купившая Nginx в этом году, подтвердила факт обыска в московском офисе компании, но не уточнила никаких деталей. «Ранее сегодня российская полиция пришла в московский офис Nginx. Мы все еще собираем факты по этому вопросу, поэтому у нас нет никаких комментариев, которые можно дать в настоящее время», — заявили в F5 Networks.

Еще в 2011 году тогдашний главный редактор «Хакера» Степа Ильин брал интервью у Игоря Сысоева, и уже тогда спрашивал его, не возникнет ли у «Рамблера» вопросов относительно авторских прав и удалось ли Игорю сохранить права на пакет за собой. Игорь ответил, что все в полном порядке, разработку Nginx он начинал еще до работы в Рамблере, а продукт с самого начала выпускался под лицензией BSD, как открытое программное обеспечение.

— Игорь, расскажите, как строилось ваше образование, как пришли к программированию и вообще увлеклись компьютерами.

— Я родился в Казахстане в маленьком городке. Когда мне было около года, моего отца (он военный) перевели в Алма-Ату, и я жил там до 18 лет. В 1987 году я окончил школу и поехал поступать в МВТУ имени Баумана, однако с первого раза поступить не удалось, и я вернулся назад в Алма-Ату, где устроился работать лаборантом в филиал Института повышения квалификации Министерства геологии СССР. Там были старые компьютеры «Искра-226», на них я и начал что-то программировать на бейсике.

А еще в то время в журнале «Радио» была опубликована серия статей, как собрать собственный компьютер «Радио-86РК», и благодаря их чтению у меня сложилось достаточно неплохое представление, как компьютер устроен и как он работает. А первый опыт работы с компьютерами был чуть раньше: в старших классах я ходил во Дворец пионеров, и там поставили компьютеры Yamaha КУВТ (стандарта MSX). Помню, когда набирал первую программку, перепутал единицу с буквой I. В общем, она у меня не работала из-за таких вещей.

— А помните свою первую программу, которой пользовались другие люди?

— Моя первая крупная и отчуждаемая программа — это антивирус AV, который я написал в 1989–1990 годах. Написан он был полностью на ассемблере, объем ассемблерного кода был где-то порядка 100 Кбайт. Программа умела находить несколько вирусов, имея зашитую внутрь программы базу с несколькими сигнатурами известных тогда в СССР вирусов, которых было от силы штук десять: вирусы «Марихуана», «София», «Вена» и еще несколько, не помню их названий. Вот это и была моя первая программа, которую я распространял в бинарниках — исходников я тогда не раздавал. В итоге она разошлась по стране, была установлена даже на нескольких заводах. Была и обратная связь: люди по почте слали письма с вирусами, записанными на дискеты. Какое-то время я поддерживал данный антивирус, но в итоге году в 1992-м я уже потерял интерес к этой теме, и программа умерла.

В 1994 году я окончил институт, а за год до этого начал работать системным администратором в одной компании, которая была связана с торговлей нефтепродуктами. Там я проработал почти семь лет, после чего в апреле 2000 года я решил уйти. Тогда как раз сдулся NASDAQ, лопнул «пузырь доткомов», и как раз в этот момент я решил уйти в интернет. Полгода я проработал в интернет-магазине XXL.RU, после чего, как сейчас помню, 13 ноября 2000 года я пришел работать в Рамблер.

— Чем вы занимались в Рамблере?

— Я работал системным администратором. Однако кроме непосредственной работы сисадмина я снова начал в свободное время писать программы. Надо отметить, что в мои должностные обязанности программирование не входило, но поскольку были время и тяга, то первое, чем я занялся, — адаптировал патч для сжатия ответов Apache. К сожалению, на тот момент имя mod_gzip было уже занято, поэтому я назвал свой вариант mod_deflate, работал он с Apache 1.3.

Потом меня попросили разобраться с модулем mod_proxy. Я его посмотрел и решил, что проще написать все с нуля, чем адаптировать там какие-то вещи. Таким образом появился модуль mod_accel — модуль и набор патчей для Apache для реверсного проксирования. Это все тоже было весной 2001 года.

— То есть все эти модули вы делали для Рамблера, одновременно выкладывая в паблик?

— В основном да. Mod_deflate на самом деле пришел из патча, который писал Дмитрий Хрусталев, работая в РБК. То есть этот патч был взят за основу, там моего кода, может, половина только.

Осенью 2001 года у меня появилась идея написать более легкий и производительный веб-сервер, чем Apache. На тот момент были уже другие похожие серверы, но все они не умели проксировать, они отдавали только статику. Был у них еще один общий недостаток — они работали в одном процессе, и, соответственно, отмасштабировать их, допустим, на двухпроцессорной машине было нереально.

На тот момент у меня уже был достаточно неплохой опыт работы с Apache — и как у системного администратора, и как у программиста. Два написанных модуля прибавили мне знаний: приходилось смотреть исходники Apache и понимать, как там все устроено. Поэтому очень многие вещи в Nginx перекочевали из Apache идеологически. Не код, а именно идеология, весь код Nginx был написан с нуля.

Однако не все мне нравилось в Apache: например, там очень легко можно сделать такую конфигурацию, которую будет крайне сложно поддерживать. То есть сайт растет, добавляется какая-то новая функциональность, и в конце концов работать с сайтом становится невозможно. Нужно что-то добавить, и ты сидишь, думаешь: «А что у меня сломается от того, что я добавлю?» В Nginx я попытался этих вещей избежать. В общем, где-то весной 2002-го я начал разрабатывать Nginx.

— Быстро ли о ваших разработках узнали внешние по отношению к Рамблеру люди? Как эволюционировал проект?

— В 2003 году про мои разработки прознали снаружи Рамблера, и, более того, Nginx начал использоваться на нескольких сайтах. Первым был эстонский сайт знакомств Rate.ee, который и сейчас существует. Это, кстати, самый высоконагруженный сайт Эстонии. Потом Nginx начал использоваться на mamba.ru и на zvuki.ru, где раздавал MP3.

В начале 2004 года Рамблер запускал сервис foto.rambler.ru, и один из коллег, Олег Бунин, попросил меня доделать в Nginx функциональность проксирования запросов, чтобы начать полноценно использовать его в том числе на фотосервисе Рамблера. До этого момента проект был достаточно академическим, я его постепенно писал, но это могло никогда ничем не кончиться, то есть в продакшн его, может быть, нигде и не поставили бы. В общем, получилось так, что я срочно доделал и проксирование. И где-то в начале 2004 года появилась версия с проксированием, а сервис foto.rambler.ru заработал на базе Nginx.

4 октября 2004 года, в очередную годовщину запуска первого космического спутника, я выпустил первую публичную версию: 0.1.0.

— Сейчас доля Nginx растет очень быстро, а как дело было в самом начале?

Сейчас он действительно растет достаточно быстро. Вначале все было заметно скромнее. В первый год наибольшую популярность Nginx по очевидным причинам набирал в России. В дальнейшем про Nginx узнали и за ее пределами, и отдельные энтузиасты начали его использовать на свой страх и риск. Появился англоязычный список рассылки, стали появляться сторонние ресурсы, описывающие Nginx, люди присылали мне все больше пожеланий и замечаний, я вносил исправления, продукт постепенно набирал популярность. Сейчас проект действительно растет очень быстро, и это стало одним из поводов для создания компании. В одиночку я уже просто перестал справляться.

— Так что, никакого продвижения вообще не было, получается, продукт сам себя сделал?

С моей стороны никакого специального пиара не было. Хотя есть такое мнение, что лучший пиар — это просто хороший продукт. То есть весь рост обуславливался тем, что Nginx «просто работал» и люди рассказывали о своем положительном опыте знакомым админам, те — своим знакомым, и так по принципу сарафанного радио. Популярность Nginx, на мой взгляд, связана с несколькими вещами. Во-первых, это эффективный и бесплатный софт, который позволяет существенно экономить аппаратные ресурсы и денежные средства, во-вторых, он в принципе неплохо работает.

— Но есть же аналоги, lighttpd тот же самый например.

— На самом деле есть еще пара причин: получилась довольно интересная комбинация жизненно важных фич для создания эффективной веб-инфраструктуры, которые я добавлял постепенно и которые сделали Nginx таким незаменимым инструментом. При этом Nginx не перегружен ненужными фичами и остается очень компактной разработкой. Кроме того, модульность Nginx позволила многим компаниям и сторонним разработчикам строить свои расширения на базе ядра Nginx. Можно сказать, что Nginx давно стал в своем роде веб-платформой.

По поводу lighttpd (lighty). Когда-то он был более распространен, чем Nginx, и более известен в мире. Его автор — немец Ян Кнешке (Jan Kneschke). Разница в популярности была связана с тем, что Россия — непонятная страна с балалайкой и медведем, снегом, а тут Европа. Опять же, и с английским у него лучше было, в том числе и с английской документацией.

Кстати, благодаря lighttpd обрел второе дыхание протокол FastCGI. До 2000–2001 года это была экзотика, все использовали интерпретаторы, которые были внутри Apache: PHP, Perl, Python. А поскольку в lighttpd исполнять внутри процесса PHP-код нереально, то решением стал FastCGI. И именно благодаря lighttpd FastCGI обрел вторую жизнь. Хотя еще в 2000 году люди говорили: «Зачем, что это такое — FastCGI? У нас есть mod_php, и там все прекрасно работает».

На чем написан nginx. Смотреть фото На чем написан nginx. Смотреть картинку На чем написан nginx. Картинка про На чем написан nginx. Фото На чем написан nginx

Xakep #249. Wi-Fi

— Какие главные кейсы использования Nginx вы видите сейчас?

— Основное использование на нагруженных сайтах — это проксирование. При этом Nginx установлен в качестве фронтэнда и проксирует приложения на бэкэндах по HTTP либо по FastCGI или WSGI. При этом стандартным подходом является использование в связке с Apache — например, на моем предыдущем месте работы Nginx долгое время работал именно так, только пару лет назад переключились на использование FastCGI. Кстати, в этом случае в статистике отображается, что появляется Nginx, пропадает Apache. Хотя на самом деле используется и то и другое: просто Nginx является одним из компонентов прокси-системы, видимым снаружи.

— Объясните наглядно, зачем вообще проксировать запросы?

— Почему, собственно, люди используют Apache с Nginx? Казалось бы, зачем тут лишнее звено, которое будет мешать. Apache хорошо и легко использовать там, где нужно выполнение какого-то приложения, например с помощью mod_php. Вот теперь представьте себе, что этот PHP способен генерировать 100 ответов в секунду, а каждый ответ имеет размер, условно, 100 Кбайт. Не все клиенты используют быстрые соединения: 10 лет назад были модемные клиенты, сейчас очень распространен мобильный интернет, у кого-то просто плохой провайдер или медленный тариф.

И вот у нас есть ответ объемом 100 Кбайт и эффективная скорость к клиенту, например 80 Кбит/с (10 Кбайт/с). Значит, этот ответ будет передаваться клиенту 10 секунд. В результате все это время, пока клиент медленно скачивает ответ, Apache вместе с PHP «жрет» 10–20 Мбайт памяти на одного клиента. И вместо того, чтобы заниматься тем, что Apache может делать быстро, он ждет, пока медленные клиенты загрузят ответы. На все это расходуется очень много памяти, да и процессор тоже.

Когда мы ставим Nginx между клиентами и Apache, то все начинает работать эффективнее: Nginx максимально быстро принимает на себя весь ответ, освобождая Apache, и потом уже медленно отдает его клиентам, не расходуя много памяти. Много памяти или процессора Nginx не расходует, потому что используется другая архитектура веб-сервера — неблокируемая, основанная на асинхронной обработке событий, что позволяет обрабатывать многие тысячи соединений в рамках одного процесса (в отличие от Apache, где каждое соединение обрабатывается отдельным процессом или тредом. — прим. ред.).

Ну и плюс к этому мы можем с бэкэнда вынести все статические файлы, это простая вещь, с которой Nginx может справиться очень легко и максимально эффективно — таких статических файлов Nginx может отдавать одновременно десятки тысяч в секунду, если память позволяет и если позволяет сетевое соединение с сервером.

— Давайте вернемся к типовым сценариям.

— Итак, первый сценарий — это когда мы просто занимаемся акселерированием, может быть, даже одного-единственного сайта. У нас был Apache, мы поставили перед ним Nginx, и — бах! — случилось чудо. Люди реально ставят и удивляются, а потом пишут на «Хабр» о том, что «надо же, как клево». Второй вариант — это тоже проксирование, но у нас много бэкэндов, то есть мы можем эффективно масштабировать горизонтально всю систему при условии, что само приложение это позволяет. Таким образом, Nginx выступает в роли балансировщика нагрузки.

Одним из недостатков текущей реализации является отсутствие нескольких политик балансировки, но люди пользуются, это работает, а функционал мы будем добавлять. Что еще? Еще сценарий, например, такой: многим людям почему-то Apache не нравится. Хотят, чтобы на сервере был только Nginx, не хотят ставить Apache. В этом случае все скрипты у них работают через FastCGI для PHP или WSGI для Python.

Например, WordPress.com — они давным-давно начали использовать Nginx в качестве балансировщика, а веб-сервером у них выступал коммерческий LiteSpeed. В этом году они уже полностью мигрировали на Nginx, теперь у них PHP работает в режиме FastCGI.

Другой стандартный вариант использования — когда Nginx просто отдает всю статику, допустим MP3, FLV-, MPEG4-видео, картинки.

— Давайте немного поговорим про безопасность. Были ли за время существования Nginx какие-либо серьезные уязвимости?

— Уязвимости были разные, но проблем с тем, чтобы с их помощью получить удаленный доступ, код выполнить, — такого не было. Можно было ронять рабочие процессы, но вот именно исполнить код — таких уязвимостей не было. Смотрите, обычно эксплоит рассчитан на что? Мы чего-то записали в сервер, ему это дело упало на стек. Сервер работает, делает возврат и попадает на этот код.

Соответственно, чтобы эксплоит заработал, надо знать, где стек будет у этого процесса. Как правило, когда есть какой-нибудь пакет Debian/Ubuntu, есть бинарник, можно воспроизвести у себя аварийную ситуацию, попытаться найти, где находится этот стек, и таким образом сделать эксплоит. Как стали с этим бороться? Стали рандомизировать адресное пространство — в современной винде, например, это так работает.

Соответственно, если туда записать где-то чуть побольше, то мы не попадем на указатель стека. Вот эта рандомизация в Nginx присутствовала с самого начала. В общем, написать рабочий эксплоит если и можно, то очень сложно. Кроме того, процессы, которые занимаются обработкой запросов, не работают от «рута».

Security-advisory были, их можно посмотреть на сайте. Я считаю, что на все эти сообщения об ошибках нужно реагировать адекватно, спокойно и профессионально. Например, скрывать факт бага, когда все уже опубликовано, говорить типа «Что? Ничего не было, все хорошо» — это просто-напросто подрывает доверие к проекту.

— Сколько человек занималось раньше и занимается сейчас разработкой, развитием проекта?

— Долгое время занимался я один, практически весь код я написал в одиночку. Года четыре назад мне стал все больше помогать Максим Дунин. Кроме нас двоих еще по мере развития продукта люди присылали патчи. Причем часто присылают просто письма с текстовым описанием проблем или пожелания. Мне говорят: «Есть ошибка, решить можно ее вот так». Просто словами. Мы это делаем по мере сил.

Еще у нас сейчас есть отдельный человек — Руслан Ермилов, который сейчас занимается документацией. Он выполняет несколько задач: это перевод текущей русской документации на английский язык, актуализация сведений и адаптация документации, чтобы она была понятна и однозначна для людей, впервые ее читающих. Частая проблема, когда автор пишет документацию, у него в голове есть определенный контекст, и он отталкивается от него. Думает, что вот это само собой разумеется, а в итоге упускает много деталей. С этим мы как раз активно боремся: Руслан смотрит на Nginx «со стороны», свежим взглядом, поэтому способен писать так, чтобы всем все было понятно. Кроме того, у Руслана огромный опыт участия в разработке и документировании сложных программных проектов.

— Предлагаю перейти к вопросам, связанным с компанией Nginx и с тем, как вы вообще пришли к созданию бизнеса.

Сейчас все расскажу. Итак, наверное, году в 2008-м пришло мне первое письмо от инвестора, я уже не помню даже, кто это был. В общем, за последние два года таких писем было около десятка. Люди хотели что-то сделать с Nginx, сделать компанию. Но я отказывался, поскольку я в целом не особо бизнесмен. Но в конце концов я стал понимать, что что-то делать нужно, иначе я просто не смогу дальше в одиночку развивать проект, уже не хватало сил на все.

Довольно много времени ушло на то, чтобы осмыслить, как и с кем я хотел бы сделать компанию «вокруг» Nginx. Вообще, я очень редко меняю направление жизни: например, до Рамблера я семь лет работал в одной компании, в Рамблере я тоже проработал десять лет. Перемены для меня тяжелы. Но тем не менее к весне этого года я все-таки окончательно решил основать компанию, которая бы помогла дальнейшему развитию проекта. Отчасти на этот шаг меня вдохновил Сергей Белоусов, создатель Parallels и фонда Runa Capital. Мы с ним несколько раз неформально общались, и в итоге я постепенно стал значительно ближе к идее создать компанию.

— Сергей умеет убеждать, да?

— Сергей вообще очень интересный человек, с ним всегда увлекательно обсуждать дела и не только, он очень энергичный человек. Сергей также довольно властный руководитель — я думаю, он влияет на очень многие решения в своих компаниях, это владелец, который любит контролировать происходящее, непосредственно участвовать в бизнесе.

Вообще, процесс переговоров с инвесторами, подписание условий сделки, куча всего — это вещь тяжелая, потому что, во-первых, очень много скучных деталей, огромное количество бумаги на английском языке, юридической, ее на русском-то языке читать тяжело, а по-английски — тем более. Обговаривание всего, опять же согласование всех вещей: мы хотим то-то, они хотят то-то. Психологически это тяжело. Зато потом, если инвесторы понимают твой бизнес, все становится значительно легче.

— Интересно: вы работали в Рамблере и трудились над Nginx. У Рамблера не было никаких прав? Это такой тонкий вопрос. Как удалось сохранить права на проект?

— Да, это довольно тонкий вопрос. Он, конечно, интересует не только вас, и мы довольно основательно его проработали. В России законодательство устроено так, что компании принадлежит то, что сделано в рамках трудовых обязанностей либо по отдельному договору. То есть должен быть договор с человеком, где было бы сказано: нужно разработать программный продукт. В Рамблере я работал системным администратором, разработкой занимался в свободное время, продукт с самого начала выпускался под лицензией BSD, как открытое программное обеспечение. В Рамблере Nginx начал применяться уже тогда, когда основной функционал был готов. Более того, даже первое применение Nginx было не в Рамблере, а на сайтах Rate.ee и zvuki.ru.

— Кто еще у вас работает в компании Nginx?

— Еще у нас работает Сергей Будневич — системный администратор, он занимается поддержкой инфраструктуры компании. Инфраструктура у нас не очень большая, но она есть. У нас есть списки рассылки, у нас есть почтовый сервер, автоматическая сборка, тестирование пекеджей, трекинг ошибок и др. Сергей нам с этим очень помогает. Мы сейчас собираемся готовить пакеты еще для нескольких Linux-дистрибутивов: CentOS, Ubuntu. Сергей занят автоматизацией разнообразных процессов, связанных с разработкой, тестированием и сопровождением. Есть еще два человека: один человек занимается маркетингом — Андрей Алексеев, а Максим Коновалов — вообще начальник всего, он делает так, что компания работает.

— А как официально называется ваша должность в компании?

— Формально я — технический директор. Я не умею руководить людьми, я больше фокусируюсь на архитектуре будущих продуктов и передаче разработки «в команду». Довольно тяжело делегировать работу, однако компания создавалась как раз с целью улучшить разработку и продукт, поэтому сейчас я пытаюсь себя этому научить. Коллеги занимаются организационными вопросами, общением с клиентами, маркетингом, отношениями с партнерами, документацией, наймом персонала и др. Разных сложностей у нас много, научиться общаться на разных уровнях — это бывает не так легко. На самом деле мы все участвуем во всех делах компании, поскольку компания не такая большая, а дел много.

— Делегировать было сложно, потому что казалось, что все плохо делают, проще самому?

— Ну да, подход такой, что я лучше это сам сделаю, потому что это будет лучше, или потому что долго объяснять, что нужно делать, или психологически тяжело сказать: «Сделай вот это». Лично мне делегировать полномочия было тяжело по ряду причин. Сейчас, как технический директор, я в основном отвечаю за архитектуру и качество разработки.

— Игорь, большое вам спасибо за интервью! Видно, что вы все-таки научились делегировать: со всеми нашими бизнес-вопросами вы нас отправили к Максиму Коновалову.

— Кстати, это первое интервью, которое я даю. Согласился только из-за того, что создали компанию. Буквально весной меня попросили люди из другого ИТ-издания, я сказал им: «Извините, я не люблю, не хочу и не умею».

— Еще раз спасибо! Максим, в переговорах с инвесторами вы представляли какой-то формализованный бизнес-план? На чем вы вообще планируете зарабатывать деньги?

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

По поводу того, что у нас за идеи для зарабатывания денег: мы хотим прежде всего добиться правильного баланса между бесплатным и платным функционалом. Мы хотим сделать то, что не совсем удалось в прошлом целому ряду компаний. Есть несколько примеров бизнеса на базе разработок open source, где компании не смогли удержать нужный баланс, пришлось закрывать какие-то фичи в самом продукте, просить за них какие-то нелепые деньги, это всех расстроило, и продукты перестали развиваться.

— То есть вы хотите сделать отдельный коммерческий продукт и найти баланс между открытым продуктом и коммерческим?

Мы не хотим делать отдельный коммерческий продукт, мы хотим делать коммерческие надстройки над основным продуктом open source. Он будет развиваться, будут появляться фичи, которые требуются сообществу. Деньги, которые мы получили, помогут нам поставить все производство продукта на новый уровень. Сейчас Игорь уже не в одиночку работает над кодом, строится командная разработка. Мы принимаем на работу людей в России, инженерная команда в Москве останется.

Соответственно, фокус на продукте open source — он очень сильный и будет оставаться таким.

В то же время мы знаем, что есть клиенты, большие компании, средние компании, даже маленькие компании, которые долгое время используют Nginx. Они построили на этом бизнес и благодарны нам. Когда мы встречаемся, то слышим что-то вроде: «Отличный, замечательный продукт — спасибо вам большое! Но нам не хватает того-то и того-то. Можете ли вы это сделать — мы вам готовы платить?» Из таких разговоров у нас постепенно складывается цепочка того, что мы могли бы продавать, не огорчая при этом сторонников продукта free open source и не подрывая доверия к проекту в целом. То есть мы собираем подобные запросы и сравниваем их с пожеланиями, которые поступают от сообщества пользователей. Мы смотрим, где есть пересечения и, если понимаем, что какой-то функционал на самом деле необходим всем, а не какой-то отдельной компании, мы это реализуем в бесплатной версии продукта.

Есть даже компании, которые говорят: «Давайте мы вам заплатим за все эти фичи, чтобы они быстрее появились в продукте. Мы хотим, чтобы все попало в open source, мы не хотим, чтобы фича была эксклюзивная и/или платная». Это называется sponsored development.

Пока у нас сформировались идеи, что коммерческие надстройки будут больше относиться к крупным примерам применения Nginx: например, с помощью коммерческих надстроек будет легче управлять тысячами инстансов, будет расширенный мониторинг производительности, дополнительный функционал, рассчитанный на хостинговые, облачные и CDN-инфраструктуры.

— То есть у вас фокус именно на продукте. Не будете отдельно продавать услуги, например, по внедрению, консалтингу?

— Дело в том, что компания маленькая, она будет оставаться маленькой — расти до компании в несколько сотен человек мы не хотим. Мы активно работаем с партнерами, с системными интеграторами, с вендорами софта и железа, активно ищем каналы для работы через партнеров. Консультации будут осуществляться частично через партнеров, частично через нас. К сожалению, услуги консалтинга и технической поддержки всем пользователям мы сами, непосредственно, предоставлять не сможем.

— А что ждет обычных пользователей в ближайшее время, планируете какие-то новые фичи?

— Из истории изменений в коде за последние три месяца, из списка релизов, которые мы выпустили, видно, что с момента образования компании мы серьезно активизировали процесс разработки и внесения исправлений. Мы интегрировали достаточно много и доработок, и новых опций. Добавили, к примеру, стриминг MP4, о котором Игоря спрашивали несколько лет. Работа идет, функционал развивается.

— Я правильно понимаю, что Игорь Сысоев — главный акционер компании, а остальная, меньшая доля принадлежит инвесторам?

— Да, Игорь — основной акционер, всего же учредителей компании трое, и есть, естественно, инвесторы как владельцы, группа инвесторов — они совместно владеют какой-то частью. Кстати, сам процесс получения денег от инвесторов технически выглядит очень просто — выпускаются ценные бумаги по соответствующему законодательству, инвесторы их покупают за какую-то сумму. Сумма переходит к вам, вы ее используете на развитие компании. Именно так все у нас и устроено.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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