SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
Мои модули и
патчи для nginx

Максим Дунин
nginx – модульность
• Без модулей – плохо
• Модульность:
  – удобно развивать основной функционал
  – легко решать специфические задачи
Модули бывают разные
• nginx – 3-й в мире, 2-й в России*
• много разного кода

Совет: изучайте внимательно то, что собираетесь
использовать.

* http://openstat.ru/counter/trends
Модули
•   auth request            http://mdounin.ru/
•   bytes filter            Все модули – простые.
•   compose
•   gunzip
•   ip tos
•   upstream keepalive
auth request
Авторизация через подзапрос.

Если подзапрос вернул 200 – доступ
разрешён, иначе – нет.
Что-то вроде fastcgi authorizers, ЕВПОЧЯ.
auth request
• auth_pam, auth_ldap – блокируются
• X-Accel-Redirect – хорошо, но неудобно
auth request
location /protected/ {
    auth_request /auth;
    ...
}
location /auth {
    proxy_pass ...
}
bytes filter
Возврат отдельных диапозонов данных из ответа. Аналог
range фильтра из стандартной поставки, но:

• Диапазоны не в заголовках, а непосредственно в
  аргументах запроса.
• Обычный ответ с кодом 200.
• Работает с любым потоком данных, в т.ч. от proxy.
bytes filter
Использование:

location /store/ {
        bytes on;
}

GET /store/file?bytes=0-999
bytes filter
Аналог flv (работает поверх proxy):

location /video/ {
    bytes on;
    if ($args ~ "start=(d+)") {
        set $args "bytes=0-12,$1-";
    }
}
compose filter
Возвращает ответ от нескольких подзапросов, но позволяет
указать Content-Length результата (и разрешает Range-запросы).

Зачем? Вместе с bytes filter позволяет художественно вставлять в
медиа-файлы другие медиа-файлы, сохраняя возможность
докачки.

Требует патчей:
http://mdounin.ru/hg/nginx-compose/
compose filter
location /audio/ {    HTTP/1.1 200 OK
                      X-Compose-Length: 100500
    compose on;       X-Compose: /data/file1?bytes=0-999
    proxy_pass ...;   X-Compose: /data/file2
                      X-Compose: /data/file1?bytes=1000-
}

location /data/ {
    bytes on;
}
gunzip
Разжимаем сжатые ответы на лету - если
клиент не понимает gzip.

Понимают gzip - более 95%.
gunzip
location / {
    gunzip on;
    proxy_pass ...
    proxy_set_header Accept-Encoding gzip;
}

Экономим трафика к бекендам.
gunzip
location / {
    gunzip on;
    gzip_static always;
}

Экономим диск и память под файловый кеш.
Нужен патч для gzip_static always.
gunzip
location / {
    gunzip on;
    memcached_gzip_flag 2;
    memcached_pass ...;
}

Экономим память в memcached. Нужен патч для
memcached_gzip_flag.
gunzip
Бонус: патч для perl-модуля, чтобы разжимались сжатые ответы из
embedded perl.

Все три описанных патча периодически проскакивают в рассылке
nginx-devel@nginx.org. Последний раз они замечены тут:

http://nginx.org/pipermail/nginx-devel/2011-February/000734.html
http://nginx.org/pipermail/nginx-devel/2011-February/000735.html
http://nginx.org/pipermail/nginx-devel/2011-February/000736.html
ip tos
Позволяет ставить IP TOS байт для ответов.
Потом можно лимитировать /
приоритизировать трафик вашим любымым
firewall'ом.
ip tos
ip_tos   0x00;

location /video/ {
    ip_tos 0x10;
}
upstream keepalive
Поддержка постоянных соединений с
бекендами.

Без патчей - хорошо работает
с memcached.
upstream keepalive
upstream memd {
    server 127.0.0.1:11211;
    keepalive 10;
}

location / {
    memcached_pass memd;
}
Почему нет keepalive'а с бекендами?
• Типичное время генерации ответа бекендом - 20 ms (будем
  верить в хорошее).
• Хорошее RTT до пользователя – 30 ms (ADSL). В среднем > 100
  ms.
• На таком фоне установление соединения с бекендом обычно
  незаметно.

Вывод: нужно в специфических случаях.
Специфические случаи
1. Плохие бекенды, с высокой стоимостью
   установления соединения.
2. "Далёкие" бекенды, с большим RTT до них.
3. Хорошие бекенды, отдающие ответ за < 1ms и
   немного пакетов. Особенно если при этом
   реальный ответ собирается из большого
   количества подзапросов.
upstream keepalive
В настоящий момент upstream keepalive умеет:

1. memcached
2. fastcgi (+ требуются патчи)
3. proxy unbuffered (+ Content-Length от бекенда)

Мы работаем над улучшением ситуации.
Патчи
1. Багфиксы, багфиксы, багфиксы…
   Для 1.0.0 - больше 20
Патчи
1. Keepalive connections reuse – in 0.9.7+
2. Gunzip related patches:
   – gzip_static always;
   – memcached_gzip_flag 2;
   – perl
3. Compose – патч для range-фильтра после подзапросов
4. Mail – поддержка SMTP pipelining
Вопросы?



  Максим Дунин
http://mdounin.ru/

Más contenido relacionado

La actualidad más candente

Get inside stage2 new
Get inside stage2 newGet inside stage2 new
Get inside stage2 newInfoTeCS
 
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр ТобольКадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тобольodnoklassniki.ru
 
Первые шаги с RabbitMQ
Первые шаги с RabbitMQПервые шаги с RabbitMQ
Первые шаги с RabbitMQAlexander Svetkin
 
Платформа для видео сроком в квартал. Александр Тоболь.
Платформа для видео сроком в квартал. Александр Тоболь.Платформа для видео сроком в квартал. Александр Тоболь.
Платформа для видео сроком в квартал. Александр Тоболь.odnoklassniki.ru
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...Ontico
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Cпецкурс 2014, занятие 7. Web-приложения
Cпецкурс 2014, занятие 7. Web-приложенияCпецкурс 2014, занятие 7. Web-приложения
Cпецкурс 2014, занятие 7. Web-приложения7bits
 
Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной сб...
Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной   сб...Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной   сб...
Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной сб...Minsk Linux User Group
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...AvitoTech
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Socketsrit2010
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Socketsguest092df8
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных сер...
Тюним память  и сетевой стек в Linux: история перевода высоконагруженных  сер...Тюним память  и сетевой стек в Linux: история перевода высоконагруженных  сер...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных сер...Dmitry Samsonov
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3Technopark
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Ontico
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Ontico
 
HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5Technopark
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSYandex
 

La actualidad más candente (20)

Get inside stage2 new
Get inside stage2 newGet inside stage2 new
Get inside stage2 new
 
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр ТобольКадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
Кадры решают все, или стриминг видео в «Одноклассниках». Александр Тоболь
 
Применяем Ansible
Применяем AnsibleПрименяем Ansible
Применяем Ansible
 
Первые шаги с RabbitMQ
Первые шаги с RabbitMQПервые шаги с RabbitMQ
Первые шаги с RabbitMQ
 
Платформа для видео сроком в квартал. Александр Тоболь.
Платформа для видео сроком в квартал. Александр Тоболь.Платформа для видео сроком в квартал. Александр Тоболь.
Платформа для видео сроком в квартал. Александр Тоболь.
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Cпецкурс 2014, занятие 7. Web-приложения
Cпецкурс 2014, занятие 7. Web-приложенияCпецкурс 2014, занятие 7. Web-приложения
Cпецкурс 2014, занятие 7. Web-приложения
 
Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной сб...
Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной   сб...Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной   сб...
Дмитрий Перлов openSUSE Build Server: tips & tricks кросс-дистрибутивной сб...
 
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (..."Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Sockets
 
Web sockets
Web socketsWeb sockets
Web sockets
 
Ddos
DdosDdos
Ddos
 
Eugene Lisitsky Web Sockets
Eugene Lisitsky Web SocketsEugene Lisitsky Web Sockets
Eugene Lisitsky Web Sockets
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных сер...
Тюним память  и сетевой стек в Linux: история перевода высоконагруженных  сер...Тюним память  и сетевой стек в Linux: история перевода высоконагруженных  сер...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных сер...
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
 
HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5HighLoad весна 2014 лекция 5
HighLoad весна 2014 лекция 5
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPS
 

Similar a мои модули и патчи для Nginx. максим дунин. зал 1

Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими рукамиStanislavMalkin
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
Magento performance
Magento performanceMagento performance
Magento performanceaheadWorks
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)Ontico
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеAlexey Androsov
 
poudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkgpoudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkgAndrey Fesenko
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...ForkConf
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Ontico
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Ontico
 
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Dev_Party
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package managercorehard_by
 
Perl Debugger и mod_perl
Perl Debugger и mod_perlPerl Debugger и mod_perl
Perl Debugger и mod_perlИван mrRico
 

Similar a мои модули и патчи для Nginx. максим дунин. зал 1 (20)

Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими руками
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Magento performance
Magento performanceMagento performance
Magento performance
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
Кадры решают все, или стриминг видео, Александр Тоболь (Одноклассники)
 
DDOS mitigation software solutions
DDOS mitigation software solutionsDDOS mitigation software solutions
DDOS mitigation software solutions
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
poudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkgpoudriere или как я перестал волноваться и полюбил pkg
poudriere или как я перестал волноваться и полюбил pkg
 
Sivko
SivkoSivko
Sivko
 
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
D do s survival guide
D do s survival guideD do s survival guide
D do s survival guide
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...
 
Hunting for a C++ package manager
Hunting for a C++ package managerHunting for a C++ package manager
Hunting for a C++ package manager
 
Perl Debugger и mod_perl
Perl Debugger и mod_perlPerl Debugger и mod_perl
Perl Debugger и mod_perl
 

Más de rit2011

классификация Ddos. александр лямин, артем гавриченков. зал 2
классификация Ddos. александр лямин, артем гавриченков. зал 2классификация Ddos. александр лямин, артем гавриченков. зал 2
классификация Ddos. александр лямин, артем гавриченков. зал 2rit2011
 
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2rit2011
 
как объяснить заказчику, что он не прав. денис тучин. зал 3
как объяснить заказчику, что он не прав. денис тучин. зал 3как объяснить заказчику, что он не прав. денис тучин. зал 3
как объяснить заказчику, что он не прав. денис тучин. зал 3rit2011
 
классификация Ddos. александр лямин, артем гавриченков. зал 2
классификация Ddos. александр лямин, артем гавриченков. зал 2классификация Ddos. александр лямин, артем гавриченков. зал 2
классификация Ddos. александр лямин, артем гавриченков. зал 2rit2011
 
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1Kpi разработчика vs kpi разработки. евгения фирсова. зал 1
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1rit2011
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....rit2011
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....rit2011
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4rit2011
 
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
I pv6   малоизвестные подробности. андрей пантюхин. зал 2I pv6   малоизвестные подробности. андрей пантюхин. зал 2
I pv6 малоизвестные подробности. андрей пантюхин. зал 2rit2011
 
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4rit2011
 
как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4rit2011
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
выращиваем интерфейс своими руками. ольга павлова. зал 3
выращиваем интерфейс своими руками. ольга павлова. зал 3выращиваем интерфейс своими руками. ольга павлова. зал 3
выращиваем интерфейс своими руками. ольга павлова. зал 3rit2011
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2rit2011
 
от Flash к html5. александр бацуев. зал 4
от Flash к html5. александр бацуев. зал 4от Flash к html5. александр бацуев. зал 4
от Flash к html5. александр бацуев. зал 4rit2011
 
Ie9 и ie10. алекс могилевский. зал 2
Ie9 и ie10. алекс могилевский. зал 2Ie9 и ie10. алекс могилевский. зал 2
Ie9 и ie10. алекс могилевский. зал 2rit2011
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...rit2011
 
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2rit2011
 

Más de rit2011 (20)

классификация Ddos. александр лямин, артем гавриченков. зал 2
классификация Ddos. александр лямин, артем гавриченков. зал 2классификация Ddos. александр лямин, артем гавриченков. зал 2
классификация Ddos. александр лямин, артем гавриченков. зал 2
 
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2
 
как объяснить заказчику, что он не прав. денис тучин. зал 3
как объяснить заказчику, что он не прав. денис тучин. зал 3как объяснить заказчику, что он не прав. денис тучин. зал 3
как объяснить заказчику, что он не прав. денис тучин. зал 3
 
классификация Ddos. александр лямин, артем гавриченков. зал 2
классификация Ddos. александр лямин, артем гавриченков. зал 2классификация Ddos. александр лямин, артем гавриченков. зал 2
классификация Ddos. александр лямин, артем гавриченков. зал 2
 
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1Kpi разработчика vs kpi разработки. евгения фирсова. зал 1
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
 
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
 
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
I pv6   малоизвестные подробности. андрей пантюхин. зал 2I pv6   малоизвестные подробности. андрей пантюхин. зал 2
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
 
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4безопасность веб приложений сегодня. дмитрий евтеев. зал 4
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
 
как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
выращиваем интерфейс своими руками. ольга павлова. зал 3
выращиваем интерфейс своими руками. ольга павлова. зал 3выращиваем интерфейс своими руками. ольга павлова. зал 3
выращиваем интерфейс своими руками. ольга павлова. зал 3
 
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
 
от Flash к html5. александр бацуев. зал 4
от Flash к html5. александр бацуев. зал 4от Flash к html5. александр бацуев. зал 4
от Flash к html5. александр бацуев. зал 4
 
Ie9 и ie10. алекс могилевский. зал 2
Ie9 и ie10. алекс могилевский. зал 2Ie9 и ie10. алекс могилевский. зал 2
Ie9 и ie10. алекс могилевский. зал 2
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
 
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
 

мои модули и патчи для Nginx. максим дунин. зал 1

  • 1. Мои модули и патчи для nginx Максим Дунин
  • 2. nginx – модульность • Без модулей – плохо • Модульность: – удобно развивать основной функционал – легко решать специфические задачи
  • 3. Модули бывают разные • nginx – 3-й в мире, 2-й в России* • много разного кода Совет: изучайте внимательно то, что собираетесь использовать. * http://openstat.ru/counter/trends
  • 4. Модули • auth request http://mdounin.ru/ • bytes filter Все модули – простые. • compose • gunzip • ip tos • upstream keepalive
  • 5. auth request Авторизация через подзапрос. Если подзапрос вернул 200 – доступ разрешён, иначе – нет. Что-то вроде fastcgi authorizers, ЕВПОЧЯ.
  • 6. auth request • auth_pam, auth_ldap – блокируются • X-Accel-Redirect – хорошо, но неудобно
  • 7. auth request location /protected/ { auth_request /auth; ... } location /auth { proxy_pass ... }
  • 8. bytes filter Возврат отдельных диапозонов данных из ответа. Аналог range фильтра из стандартной поставки, но: • Диапазоны не в заголовках, а непосредственно в аргументах запроса. • Обычный ответ с кодом 200. • Работает с любым потоком данных, в т.ч. от proxy.
  • 9. bytes filter Использование: location /store/ { bytes on; } GET /store/file?bytes=0-999
  • 10. bytes filter Аналог flv (работает поверх proxy): location /video/ { bytes on; if ($args ~ "start=(d+)") { set $args "bytes=0-12,$1-"; } }
  • 11. compose filter Возвращает ответ от нескольких подзапросов, но позволяет указать Content-Length результата (и разрешает Range-запросы). Зачем? Вместе с bytes filter позволяет художественно вставлять в медиа-файлы другие медиа-файлы, сохраняя возможность докачки. Требует патчей: http://mdounin.ru/hg/nginx-compose/
  • 12. compose filter location /audio/ { HTTP/1.1 200 OK X-Compose-Length: 100500 compose on; X-Compose: /data/file1?bytes=0-999 proxy_pass ...; X-Compose: /data/file2 X-Compose: /data/file1?bytes=1000- } location /data/ { bytes on; }
  • 13. gunzip Разжимаем сжатые ответы на лету - если клиент не понимает gzip. Понимают gzip - более 95%.
  • 14. gunzip location / { gunzip on; proxy_pass ... proxy_set_header Accept-Encoding gzip; } Экономим трафика к бекендам.
  • 15. gunzip location / { gunzip on; gzip_static always; } Экономим диск и память под файловый кеш. Нужен патч для gzip_static always.
  • 16. gunzip location / { gunzip on; memcached_gzip_flag 2; memcached_pass ...; } Экономим память в memcached. Нужен патч для memcached_gzip_flag.
  • 17. gunzip Бонус: патч для perl-модуля, чтобы разжимались сжатые ответы из embedded perl. Все три описанных патча периодически проскакивают в рассылке nginx-devel@nginx.org. Последний раз они замечены тут: http://nginx.org/pipermail/nginx-devel/2011-February/000734.html http://nginx.org/pipermail/nginx-devel/2011-February/000735.html http://nginx.org/pipermail/nginx-devel/2011-February/000736.html
  • 18. ip tos Позволяет ставить IP TOS байт для ответов. Потом можно лимитировать / приоритизировать трафик вашим любымым firewall'ом.
  • 19. ip tos ip_tos 0x00; location /video/ { ip_tos 0x10; }
  • 20. upstream keepalive Поддержка постоянных соединений с бекендами. Без патчей - хорошо работает с memcached.
  • 21. upstream keepalive upstream memd { server 127.0.0.1:11211; keepalive 10; } location / { memcached_pass memd; }
  • 22. Почему нет keepalive'а с бекендами? • Типичное время генерации ответа бекендом - 20 ms (будем верить в хорошее). • Хорошее RTT до пользователя – 30 ms (ADSL). В среднем > 100 ms. • На таком фоне установление соединения с бекендом обычно незаметно. Вывод: нужно в специфических случаях.
  • 23. Специфические случаи 1. Плохие бекенды, с высокой стоимостью установления соединения. 2. "Далёкие" бекенды, с большим RTT до них. 3. Хорошие бекенды, отдающие ответ за < 1ms и немного пакетов. Особенно если при этом реальный ответ собирается из большого количества подзапросов.
  • 24. upstream keepalive В настоящий момент upstream keepalive умеет: 1. memcached 2. fastcgi (+ требуются патчи) 3. proxy unbuffered (+ Content-Length от бекенда) Мы работаем над улучшением ситуации.
  • 25. Патчи 1. Багфиксы, багфиксы, багфиксы… Для 1.0.0 - больше 20
  • 26. Патчи 1. Keepalive connections reuse – in 0.9.7+ 2. Gunzip related patches: – gzip_static always; – memcached_gzip_flag 2; – perl 3. Compose – патч для range-фильтра после подзапросов 4. Mail – поддержка SMTP pipelining
  • 27. Вопросы? Максим Дунин http://mdounin.ru/