SlideShare a Scribd company logo
FEERSUM ENJINN
   nginx: inside
Фичи nginx

● event driven
● non-blocking


● modular
Устройство:
 процессы
Nginx Master

● Мониторит воркеры
● Обработка сигналов


   -INT — выход
   -HUP — переконфигурация
   -USR1 — log rotate
Nginx Worker

● Обработка запросов
● Выполняет команды из мастер-

  процесса
Cache Manager,
     Cache Loader


● loader: подгружает информацию о
  содержимом кеша
● manager: отслеживает протухание

  записей в кеше
HTTP Request:
немного механики
Обработка запроса
●   Получить данные, распарсить запрос
●   Найти соответствующие сервер и location
●   Запустить обработчики фаз
●   Сгенерировать ответ
●   Применить фильтры к заголовкам и телу
    ответа
●   Отправить клиенту то, что получилось
Фазы обработки
● Post Read (например, для realip)
● Rewrite & read config


● Проверка доступа


● Проверка существования файлов

  (если надо)
● Генерация контента


● Запись логов
Устройство:
  модули
Модули ядра

● event
● http main


  (легко запомнить)
Основные модули
  ● HTTP Core
  ● Upstream


  ● Access


  ● Rewrite


  ● Charset


  ● Log


    … и другие
И ещё модули
  (опционально)
HTTP Addition       SSL
Embedded Perl       Stub Status
FLV                 WebDAV
Gzip Precompression Google Perftools
Random Index        XSLT
GeoIP               Secure Link
Real IP             Image Filter
Модуль
Hello World
Что требуется?
● Директивы конфига
● Обработчики


● Установка обработчиков


● Порядок инициализации модуля


● Описание модуля
Директивы конфига
static ngx_command_t ngx_http_hello_commands[] = {
     { ngx_string("hello"),
      NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
      ngx_http_hello,
      0,
      0,
      NULL },


     ngx_null_command
};
Обработчики
static ngx_int_t
ngx_http_hello_handler(ngx_http_request_t *r)
{
    /* То, что делает модуль - находится здесь */
    return NGX_OK;
}
Установка обработчиков
static char *
ngx_http_hello(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
    ngx_http_core_loc_conf_t *clcf;


    clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
    clcf->handler = ngx_http_hello_handler;


    return NGX_CONF_OK;
}
Порядок инициализации
         (контекст)
static ngx_http_module_t ngx_http_hello_module_ctx = {
    NULL,               /* preconfiguration */
    NULL,               /* postconfiguration */
    NULL,               /* create main configuration */
    NULL,               /* init main configuration */
    NULL,               /* create server configuration */
    NULL,               /* merge server configuration */
    NULL,               /* create location configurtion */
    NULL                /* merge location configuration */
}
Описание модуля
ngx_module_t ngx_http_hello_module = {
     NGX_MODULE_V1,
     &ngx_http_hello_module_ctx,    /* module context */
     ngx_http_hello_commands,      /* module directives */
     NGX_HTTP_MODULE,                /* module type */
     NULL,               /* init master */
     NULL,               /* init module */
     NULL,               /* init process */
     NULL,               /* init thread */
     NULL,               /* exit thread */
     NULL,               /* exit process */
     NULL,               /* exit master */
     NGX_MODULE_V1_PADDING
};
Build It!
●   Файл config
ngx_addon_name=ngx_http_hello_module
HTTP_MODULES="$HTTP_MODULES ngx_http_hello_module"
 NGX_ADDON_SRCS="$NGX_ADDON_SRCS
$ngx_addon_dir/ngx_http_hello_module.c"



●   Configure nginx
./configure --add-module=path/to/your/new/module/directory
Инструменты
  отладки
Valgrind

●   Проверка memory leaks
Strace
● Трассировка системных
вызовов
● Deadlock detector
GDB

● Где упало?
● Кто записал в память?

● Трассировка
Работает?
  Grats!

More Related Content

PDF
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
PPT
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
PDF
Upgrade with 6 to 7. Denis Komel'kov
PPTX
Применяем Ansible
PPTX
Первые шаги с RabbitMQ
PPTX
PowerShell
PDF
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
PDF
2014.10.15 Сергей Бурладян, Avito.ru
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
Moscow Exchange Test Automation of a Backup System at TMPA-2014 (Trading Syst...
Upgrade with 6 to 7. Denis Komel'kov
Применяем Ansible
Первые шаги с RabbitMQ
PowerShell
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
2014.10.15 Сергей Бурладян, Avito.ru

What's hot (20)

PDF
07 - Web-технологии. Web-сервера
PDF
pgconf.ru 2015.avito postgresql recovery
PDF
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
PDF
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
PDF
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
PDF
Hunting for a C++ package manager
PDF
Moscow DevOps meetup 18.05.13
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
ODP
VDS: обнаружение, выявление причин и устранение проблемных ситуаций. Диагнос...
PDF
Thumbtack Expertise Days # 5 - Ansible
PPTX
Asynchrony and coroutines
ODP
MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PDF
Kubasov 1 7_deploy
PDF
Леонид Васильев "Python в инфраструктуре поиска"
PDF
Леонид Васильев "Python в инфраструктуре поиска"
PDF
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
PDF
Varnish and Drupal.
PPTX
Применение фреймворка GStreamer в системе видеонаблюдения
PPT
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
07 - Web-технологии. Web-сервера
pgconf.ru 2015.avito postgresql recovery
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
#2 "Распространённые ошибки в JavaScript" Денис Речкунов
Hunting for a C++ package manager
Moscow DevOps meetup 18.05.13
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
VDS: обнаружение, выявление причин и устранение проблемных ситуаций. Диагнос...
Thumbtack Expertise Days # 5 - Ansible
Asynchrony and coroutines
MySQL/InnoDB изнутри: узкие места / Александр Крижановский (NatSys Lab)
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
Kubasov 1 7_deploy
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
Varnish and Drupal.
Применение фреймворка GStreamer в системе видеонаблюдения
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
Ad

Viewers also liked (8)

PDF
Company Presentation
PDF
SbS ebrochure Short
PPSX
La Vacanza Della Vita
PDF
Sb Sebrochure Short
PDF
Value Proposition
PDF
La Vacanza Della Vita
PPT
Presentacion Cayon
PPTX
Shrm Job Seeker Info
Company Presentation
SbS ebrochure Short
La Vacanza Della Vita
Sb Sebrochure Short
Value Proposition
La Vacanza Della Vita
Presentacion Cayon
Shrm Job Seeker Info
Ad

Similar to nginx internals (20)

PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PPTX
Nginx.pm
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PDF
Механика DDoS (Александр Крижановский)
PDF
Web осень 2013 лекция 3
PDF
Компиляция скриптов PHP (Алексей Романенко)
PPT
Web осень 2012 лекция 3
PDF
Максим Дунин, Nginx, Inc.
PPTX
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
PPT
Web весна 2013 лекция 3
PDF
Компиляция скриптов PHP. Алексей Романенко
PDF
специализированные http-демона (Сергей Боченков, Александр Панков)
PDF
Михаил Юматов: SaltStack
ODP
Nginx Igor Sysoev
PDF
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
PPTX
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
PPTX
Основные возможности Symfony 2
PDF
08 - Web-технологии. Архитектура frontend-backend
PDF
Веб-сервер
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Nginx.pm
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Механика DDoS (Александр Крижановский)
Web осень 2013 лекция 3
Компиляция скриптов PHP (Алексей Романенко)
Web осень 2012 лекция 3
Максим Дунин, Nginx, Inc.
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
Web весна 2013 лекция 3
Компиляция скриптов PHP. Алексей Романенко
специализированные http-демона (Сергей Боченков, Александр Панков)
Михаил Юматов: SaltStack
Nginx Igor Sysoev
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Основные возможности Symfony 2
08 - Web-технологии. Архитектура frontend-backend
Веб-сервер

nginx internals