Upload
ontico
View
137
Download
1
Embed Size (px)
Citation preview
Как и зачем создавать NginX-модуль - теория, практика, профитСошников Василий [email protected]
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
Аналогия
PhasesNginX
Module 1 Module N
NextPhase 1
Module 1 Module N
NextPhase N
PhasesAPI: 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
ModuleAPI: nginx/src/http/ngx_http_config.h
Merge >
< Create
Install >
Module declarationAPI: nginx/src/core/ngx_conf_file.h
Handlers & Filters
PhasesNginX
Module 1 Module N
NextPhase 1
Module 1 Module N
NextPhase 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 bufferAPI: nginx/src/core/ngx_buf.h
Chain bufferAPI: nginx/src/core/ngx_buf.h
Flags >
< Flags
Ptrs >
Don’t read from a file >
Stream parsing >
Proxies
Анатомия
upstream Keepalive module!
Application serverHTTPApplication serverApplication serverApplication serverApplication serverApplication server
Native protocol
Proxy & balancing
Deploying
Сборка < name
< libs
< root
include dirs >
sources >
headers >
СборкаInstall >
run >
Доставка• RPM/DEB. • Ресурсы не должны пересекаться с системным nginx!
• Shared library • Docker
Зачем создавать свои модули?
CacheGeoIP
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-protocolApplication
server
Ссылки на примеры https://github.com/dedok/nginx-tutorials
Вопросы & Контакты• GitHub • https://github.com/dedok
• Twitter • https://twitter.com/vasayso • @vasayso