45
Как и зачем создавать NginX-модуль - теория, практика, профит Сошников Василий [email protected]

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

  • Upload
    ontico

  • View
    137

  • Download
    1

Embed Size (px)

Citation preview

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

Как и зачем создавать NginX-модуль - теория, практика, профитСошников Василий [email protected]

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

Agenda

• Введение & FAQ • Анатомия • Ответ на вопрос: “зачем создавать модули?” • Ссылки на примеры & Вопросы

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

Введение & FAQ

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

Архитектура NginX

core

http upstreams script

NginX

modules

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

Memory model

• Pool allocation - nginx чистит память сам • Выбирайте правильный pool! • Старайтесь использовать только ngx_palloc функции.

API: nginx/src/core/ngx_palloc.h

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

API: nginx/src/core/ngx_palloc.h

Ссылка на pool >

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

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)

Анатомия

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

Типы

• Handlers • Filters • Proxies • …

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

Chain of responsibility

http

NginX

Module 1 Module N

Request

Reply

Next Next

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

Chain of responsibility

Аналогия

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

PhasesNginX

Module 1 Module N

NextPhase 1

Module 1 Module N

NextPhase N

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

PhasesAPI: nginx/src/http/ngx_http_core_module.h

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

Базовые компоненты

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

Configuration

Соглашения по именованию:ngx_http_NAME_{main, srv, loc}_conf_t

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

Configuration. nginx.conf directive

API: nginx/src/core/ngx_conf_file.{h, c}

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

Configuration. nginx.conf directive

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

ModuleAPI: nginx/src/http/ngx_http_config.h

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

Merge >

< Create

Install >

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

Module declarationAPI: nginx/src/core/ngx_conf_file.h

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

Handlers & Filters

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

PhasesNginX

Module 1 Module N

NextPhase 1

Module 1 Module N

NextPhase N

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

Handlers

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

< add handler

handler >

Install >

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

Filters

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

< filter

Header filter >

Install >

Body filter >

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

Request

API: nginx/src/http/ngx_http_request.{h.c}

HTTP in/out headers >

Body >

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

Chain bufferAPI: nginx/src/core/ngx_buf.h

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

Chain bufferAPI: nginx/src/core/ngx_buf.h

Flags >

< Flags

Ptrs >

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

Don’t read from a file >

Stream parsing >

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

Proxies

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

Анатомия

upstream Keepalive module!

Application serverHTTPApplication serverApplication serverApplication serverApplication serverApplication server

Native protocol

Proxy & balancing

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

Deploying

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

Сборка < name

< libs

< root

include dirs >

sources >

headers >

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

СборкаInstall >

run >

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

Доставка• RPM/DEB. • Ресурсы не должны пересекаться с системным nginx!

• Shared library • Docker

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

Зачем создавать свои модули?

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

CacheGeoIP

Proxy

gzip

RTMP/HLS

And many other modulesOpenResty

Расширить функционал / Решить проблемуNew Module

Perl

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

Признаемся!Мы используем ReverseProxy там, где логичнее иметь свой модуль. (С)

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

Решаем бизнес задачи

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

Analytics & Statictics

Set/Check cookie

Store to log

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

Advertisement

Get Banner

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

HTTP(S) from/to X-protocol

HTTP(S) X-protocolApplication

server

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

Ссылки на примеры https://github.com/dedok/nginx-tutorials

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

Вопросы & Контакты• GitHub • https://github.com/dedok

• Twitter • https://twitter.com/vasayso • @vasayso