SlideShare a Scribd company logo
Как и зачем создавать
NginX-модуль -
теория, практика, профит
Сошников Василий
v.soshnikov@corp.mail.ru
Agenda
• Введение & FAQ
• Анатомия
• Ответ на вопрос: “зачем создавать модули?”
• Ссылки на примеры & Вопросы
Введение & FAQ
Архитектура NginX
core
http upstreams script
NginX
modules
Memory model
• Pool allocation - nginx чистит память сам
• Выбирайте правильный pool!
• Старайтесь использовать только ngx_palloc функции.
API: nginx/src/core/ngx_palloc.h
API: nginx/src/core/ngx_palloc.h
Ссылка на pool >
API
• Структуры данных
• OS API
• event-driven state machine
• Полезные функции
API: nginx/src/core/*, nginx/src/http/*, nginx/src/event/*, nginx/src/os/*
Анатомия
Типы
• Handlers
• Filters
• Proxies
• …
Chain of responsibility
http
NginX
Module 1 Module N
Request
Reply
Next Next
Chain of responsibility
Аналогия
Phases
NginX
Module 1 Module N
Next
Phase 1
Module 1 Module N
Next
Phase N
Phases
API: nginx/src/http/ngx_http_core_module.h
Базовые компоненты
Configuration
Соглашения по именованию:

ngx_http_NAME_{main, srv, loc}_conf_t
Configuration. nginx.conf directive
API: nginx/src/core/ngx_conf_file.{h, c}
Configuration. nginx.conf directive
Module
API: nginx/src/http/ngx_http_config.h
Merge >
< Create
Install >
Module declaration
API: nginx/src/core/ngx_conf_file.h
Handlers & Filters
Phases
NginX
Module 1 Module N
Next
Phase 1
Module 1 Module N
Next
Phase N
Handlers
< add handler
handler >
Install >
Filters
< filter
Header filter >
Install >
Body filter >
Request
API: nginx/src/http/ngx_http_request.{h.c}
HTTP in/out headers >
Body >
Chain buffer
API: nginx/src/core/ngx_buf.h
Chain buffer
API: nginx/src/core/ngx_buf.h
Flags >
< Flags
Ptrs >
Don’t read from a file >
Stream parsing >
Proxies
Анатомия
upstream Keepalive module!
Application serverHTTP
Application server
Application server
Application server
Application server
Application server
Native protocol
Proxy & balancing
Deploying
Сборка
< name
< libs
< root
include dirs >
sources >
headers >
Сборка
Install >
run >
Доставка
• RPM/DEB.
• Ресурсы не должны пересекаться с системным nginx!
• Shared library
• Docker
Зачем создавать свои
модули?
Cache
GeoIP
Proxy
gzip
RTMP/HLS
And many other modulesOpenResty
Расширить функционал / Решить проблему
New Module
Perl
Признаемся!
Мы используем ReverseProxy
там, где логичнее иметь свой
модуль. (С)
Решаем бизнес задачи
Analytics & Statictics
Set/Check cookie
Store to log
Advertisement
Get Banner
HTTP(S) from/to X-protocol
HTTP(S) X-protocol
Application
server
Ссылки на примеры
https://github.com/dedok/nginx-tutorials
Вопросы & Контакты
• GitHub
• https://github.com/dedok
• Twitter
• https://twitter.com/vasayso
• @vasayso

More Related Content

PPTX
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
PDF
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
PPTX
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
PPTX
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
PPTX
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
PDF
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
PDF
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
PDF
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmati...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)

What's hot (20)

PDF
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
PDF
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
PPTX
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
PPTX
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
PPTX
Денис Иванов
PDF
Архитектура HAWQ / Алексей Грищенко (Pivotal)
PPTX
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
PPSX
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
PDF
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
PPTX
Как собирать gps треки раз в секунду, экономя траффик
PDF
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
PPTX
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PDF
Адаптивная оптимизация запросов в реляционных СУБД / Олег Иванов (Postgres Pr...
PDF
Javascript-фреймворки:
 должен остаться только один
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
Денис Иванов
PDF
Анатомия веб сервиса (HighLoad-2014)
PDF
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Денис Иванов
Архитектура HAWQ / Алексей Грищенко (Pivotal)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Как собирать gps треки раз в секунду, экономя траффик
Инфраструктура распределенных приложений на nodejs / Станислав Гуменюк (Rambl...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Адаптивная оптимизация запросов в реляционных СУБД / Олег Иванов (Postgres Pr...
Javascript-фреймворки:
 должен остаться только один
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Денис Иванов
Анатомия веб сервиса (HighLoad-2014)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Ad

Viewers also liked (20)

PDF
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
PDF
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
PPTX
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
PDF
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
PPTX
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
PDF
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
PDF
Lua tech talk
PDF
Максим Дунин, Nginx, Inc.
PDF
Масштабируемая конфигурация Nginx, Игорь Сысоев (Nginx)
PPTX
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
PDF
基于OpenResty的百万级长连接推送
PDF
Using ngx_lua in UPYUN
PDF
Roll Your Own API Management Platform with nginx and Lua
PDF
Nginx Scripting - Extending Nginx Functionalities with Lua
PDF
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
PDF
Practical ngx_mruby
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PPTX
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
PPTX
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
PDF
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
За счет чего Tarantool такой оптимальный / Денис Аникин (Mail.Ru)
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Artisto: опыт запуска нейросетей в production / Эдуард Тянтов (Mail.ru Group)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
Lua tech talk
Максим Дунин, Nginx, Inc.
Масштабируемая конфигурация Nginx, Игорь Сысоев (Nginx)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
基于OpenResty的百万级长连接推送
Using ngx_lua in UPYUN
Roll Your Own API Management Platform with nginx and Lua
Nginx Scripting - Extending Nginx Functionalities with Lua
Профилирование кода на C/C++ в *nix-системах / Александр Алексеев (Postgres P...
Practical ngx_mruby
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Быстрый старт iOS приложения на примере iOS Почты Mail.Ru / Николай Морев (Ma...
Скорость с доставкой до пользователя / Анатолий Орлов (Self Employed), Денис ...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Ad

Similar to Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru) (20)

PPTX
Errors Tracker
PPTX
Платформа .NET Core глазами PHP-разработчика
PPT
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
PPTX
Presentation_ppt
PPTX
vi stories: миграция на .NET Core
PPTX
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
PDF
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
PDF
aOS Moscow - R2 - PnP provisioning engine in the wild
PDF
NPM и модульная архитектура приложения
PDF
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
PDF
Presentation
PPTX
антон веснин Rails Application Servers
PPTX
развертывание среды Rails (антон веснин, Locum Ru)
PDF
Что нового в ASP.NET 5
PPTX
Protrarctor and Angular
PDF
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
PDF
PDF
Приватный клауд на базе OpenStack
PDF
SETCON'18 - Vitali Fokin - Kubernetes 101
PPTX
What's new in Visual Studio 2012
Errors Tracker
Платформа .NET Core глазами PHP-разработчика
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Presentation_ppt
vi stories: миграция на .NET Core
Как мы строили Jelastic - облачную платформу (PaaS) нового поколения (Дмитрий...
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
aOS Moscow - R2 - PnP provisioning engine in the wild
NPM и модульная архитектура приложения
Как и зачем создавать NginX-модуль — теория, практика, профит. Часть 2 / Васи...
Presentation
антон веснин Rails Application Servers
развертывание среды Rails (антон веснин, Locum Ru)
Что нового в ASP.NET 5
Protrarctor and Angular
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Приватный клауд на базе OpenStack
SETCON'18 - Vitali Fokin - Kubernetes 101
What's new in Visual Studio 2012

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
PDF
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)

Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)