Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
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

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