Как и зачем создавать nginx-модуль - теория, практика,...

Post on 20-Feb-2017

152 Views

Category:

Engineering

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Как и зачем создавать 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

Аналогия

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

top related