Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,414 views

Published on

  • Be the first to comment

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

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

×