Как и зачем создавать nginx-модуль - теория, практика,...
TRANSCRIPT
![Page 1: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/1.jpg)
Как и зачем создавать NginX-модуль - теория, практика, профитСошников Василий [email protected]
![Page 2: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/2.jpg)
Agenda
• Введение & FAQ • Анатомия • Ответ на вопрос: “зачем создавать модули?” • Ссылки на примеры & Вопросы
![Page 3: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/3.jpg)
Введение & FAQ
![Page 4: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/4.jpg)
Архитектура NginX
core
http upstreams script
NginX
modules
![Page 5: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/5.jpg)
Memory model
• Pool allocation - nginx чистит память сам • Выбирайте правильный pool! • Старайтесь использовать только ngx_palloc функции.
API: nginx/src/core/ngx_palloc.h
![Page 6: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/6.jpg)
API: nginx/src/core/ngx_palloc.h
Ссылка на pool >
![Page 7: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/7.jpg)
API
• Структуры данных • OS API • event-driven state machine • Полезные функции
API: nginx/src/core/*, nginx/src/http/*, nginx/src/event/*, nginx/src/os/*
![Page 8: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/8.jpg)
Анатомия
![Page 9: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/9.jpg)
Типы
• Handlers • Filters • Proxies • …
![Page 10: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/10.jpg)
Chain of responsibility
http
NginX
Module 1 Module N
Request
Reply
Next Next
![Page 11: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/11.jpg)
Chain of responsibility
Аналогия
![Page 12: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/12.jpg)
PhasesNginX
Module 1 Module N
NextPhase 1
Module 1 Module N
NextPhase N
![Page 13: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/13.jpg)
PhasesAPI: nginx/src/http/ngx_http_core_module.h
![Page 14: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/14.jpg)
Базовые компоненты
![Page 15: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/15.jpg)
Configuration
Соглашения по именованию:ngx_http_NAME_{main, srv, loc}_conf_t
![Page 16: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/16.jpg)
Configuration. nginx.conf directive
API: nginx/src/core/ngx_conf_file.{h, c}
![Page 17: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/17.jpg)
Configuration. nginx.conf directive
![Page 18: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/18.jpg)
ModuleAPI: nginx/src/http/ngx_http_config.h
![Page 19: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/19.jpg)
Merge >
< Create
Install >
![Page 20: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/20.jpg)
Module declarationAPI: nginx/src/core/ngx_conf_file.h
![Page 21: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/21.jpg)
Handlers & Filters
![Page 22: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/22.jpg)
PhasesNginX
Module 1 Module N
NextPhase 1
Module 1 Module N
NextPhase N
![Page 23: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/23.jpg)
Handlers
![Page 24: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/24.jpg)
< add handler
handler >
Install >
![Page 25: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/25.jpg)
Filters
![Page 26: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/26.jpg)
< filter
Header filter >
Install >
Body filter >
![Page 27: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/27.jpg)
Request
API: nginx/src/http/ngx_http_request.{h.c}
HTTP in/out headers >
Body >
![Page 28: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/28.jpg)
Chain bufferAPI: nginx/src/core/ngx_buf.h
![Page 29: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/29.jpg)
Chain bufferAPI: nginx/src/core/ngx_buf.h
Flags >
< Flags
Ptrs >
![Page 30: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/30.jpg)
Don’t read from a file >
Stream parsing >
![Page 31: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/31.jpg)
Proxies
![Page 32: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/32.jpg)
Анатомия
upstream Keepalive module!
Application serverHTTPApplication serverApplication serverApplication serverApplication serverApplication server
Native protocol
Proxy & balancing
![Page 33: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/33.jpg)
Deploying
![Page 34: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/34.jpg)
Сборка < name
< libs
< root
include dirs >
sources >
headers >
![Page 35: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/35.jpg)
СборкаInstall >
run >
![Page 36: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/36.jpg)
Доставка• RPM/DEB. • Ресурсы не должны пересекаться с системным nginx!
• Shared library • Docker
![Page 37: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/37.jpg)
Зачем создавать свои модули?
![Page 38: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/38.jpg)
CacheGeoIP
Proxy
gzip
RTMP/HLS
And many other modulesOpenResty
Расширить функционал / Решить проблемуNew Module
Perl
![Page 39: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/39.jpg)
Признаемся!Мы используем ReverseProxy там, где логичнее иметь свой модуль. (С)
![Page 40: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/40.jpg)
Решаем бизнес задачи
![Page 41: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/41.jpg)
Analytics & Statictics
Set/Check cookie
Store to log
![Page 42: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/42.jpg)
Advertisement
Get Banner
![Page 43: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/43.jpg)
HTTP(S) from/to X-protocol
HTTP(S) X-protocolApplication
server
![Page 45: Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошников (Mail.Ru)](https://reader034.vdocuments.pub/reader034/viewer/2022042618/58ab14141a28ab70038b6415/html5/thumbnails/45.jpg)
Вопросы & Контакты• GitHub • https://github.com/dedok
• Twitter • https://twitter.com/vasayso • @vasayso