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

  • 1,058 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,058
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
12
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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 requestlocation /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 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. gunzipРазжимаем сжатые ответы на лету - есликлиент не понимает gzip.Понимают gzip - более 95%.
  • 14. gunziplocation / { gunzip on; proxy_pass ... proxy_set_header Accept-Encoding gzip;}Экономим трафика к бекендам.
  • 15. gunziplocation / { gunzip on; gzip_static always;}Экономим диск и память под файловый кеш.Нужен патч для gzip_static always.
  • 16. gunziplocation / { 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.htmlhttp://nginx.org/pipermail/nginx-devel/2011-February/000735.htmlhttp://nginx.org/pipermail/nginx-devel/2011-February/000736.html
  • 18. ip tosПозволяет ставить IP TOS байт для ответов.Потом можно лимитировать /приоритизировать трафик вашим любымымfirewallом.
  • 19. ip tosip_tos 0x00;location /video/ { ip_tos 0x10;}
  • 20. upstream keepaliveПоддержка постоянных соединений сбекендами.Без патчей - хорошо работаетс memcached.
  • 21. upstream keepaliveupstream 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. memcached2. 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; – perl3. Compose – патч для range-фильтра после подзапросов4. Mail – поддержка SMTP pipelining
  • 27. Вопросы? Максим Дунинhttp://mdounin.ru/