The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск nginx 1.9.11 с поддержкой динамически загружаемых модулей

09.02.2016 18:15

Доступен выпуск основной ветки высокопроизводительного HTTP-сервера nginx 1.9.11, в котором реализованы следующие изменения:

  • Добавлена поддержка динамически загружаемых модулей. Модуль оформляется в виде разделяемой библиотеки и загружается при помощи директивы load_module (например, "load_module modules/ngx_mail_module.so"). Из поддерживающих динамическую загрузку модулей отмечаются:
    • GeoIP (ngx_http_geoip_module),
    • Image-Filter (ngx_http_image_filter_module),
    • Mail (ngx_mail_{core, auth, imap, pop3, proxy, smtp}_module),
    • Stream (ngx_stream_{core, access, limit_conn, proxy, ssl, upstream}_module)
    • XSLT (ngx_http_xslt_module).

    Для сборки модуля в форме разделяемой библиотеки следует указать флаг "dynamic", например "--with-http_geoip_module=dynamic";

  • В resolver добавлена поддержка отправки DNS-запросов с использованием протокола TCP;
  • Исправлена ошибка, из-за которой переменная $request_length не учитывала размер заголовков запроса при использовании HTTP/2;
  • Исправлена ошибка в модуле ngx_http_v2_module.


  1. Главная ссылка к новости (http://mailman.nginx.org/piper...)
  2. OpenNews: Обновление nginx 1.8.1 и 1.9.10 с устранением уязвимостей в резолвере DNS
  3. OpenNews: Выпуск nginx 1.9.9
  4. OpenNews: Выпуск nginx 1.9.8
  5. OpenNews: Выпуск nginx 1.9.7
  6. OpenNews: В HTTP-сервер nginx встроена поддержка JavaScript
Автор новости: eRIC
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/43839-nginx
Ключевые слова: nginx
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (45) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, xl32 (ok), 19:46, 09/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Ух, заживём! Сразу пробовать на ngx_brotli.
     
     
  • 2.28, xl32 (ok), 13:20, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Да, динамический brotli прекрасно работает. Протестировано на https://zavedu.org/
     

  • 1.5, Аноним (-), 23:22, 09/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Еще немного и хтаксес запилят
     
     
  • 2.6, Michael Shigorin (ok), 00:59, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ну да, про a patchy server все хором подумали при LoadModule...
     
     
  • 3.49, myhand (ok), 13:57, 11/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Зато сколько было кривляний перед тем как запилить...
     
  • 2.10, Аноним (-), 06:29, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Скоро будет жирнее индейца ))
     
     
  • 3.11, Аноним (-), 06:41, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Скоро будет жирнее индейца ))

    cherokee или apache?

     
     
  • 4.33, eRIC (ok), 15:04, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > cherokee или apache?

    apache2


     

  • 1.7, Sw00p aka Jerom (?), 02:29, 10/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    ещёбы создали бы репозиторий сторонних модулей с проверкой качества было бы хорошо, а то блин модсек текёт как лань
     
     
  • 2.47, GrammarNarziss (?), 11:10, 11/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    "течёт", позорище
     
     
  • 3.50, Sw00p aka Jerom (?), 15:50, 11/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    граммарнаци?
     

  • 1.8, Какаянахренразница (ok), 05:21, 10/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Добавлена поддержка динамически загружаемых модулей. Модуль оформляется
    > в виде разделяемой библиотеки и загружается при помощи директивы
    > load_module (например, "load_module modules/ngx_mail_module.so");

    И в каком месте он динамический, если его надо прописывать в конфиге и если он загружается в момент запуска? Или можно сделать что-нибудь типа "nginx -s load_module modules/foo.so"?

     
     
  • 2.9, Аноним (-), 06:22, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    /etc/init.d/nginx upgrade

    ну да

     
     
  • 3.18, Какаянахренразница (ok), 10:01, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > /etc/init.d/nginx upgrade

    Спасибо тебе, мой анонимный друг.

    Не совсем понятно, что именно происходит внутри инит-скрипта. Пришлось гуглить. Нашёл вот такое: http://nginx.org/en/docs/control.html#upgrade Там написано, что бинарник nginx аккуратно перегружается и заново читает конфиг.

    Но вопрос остаётся: возможно ли подгрузить/выгрузить модуль без правки конфигов и перезапуска серванта.

     
     
  • 4.22, Аноним (-), 12:29, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Нет. У nginx'а динамически загружаемые в значении Dynamic linked, а не "подгружаемые в любой момент времени" - видимо издержки перевода.

    Но ты всегда можешь написать патч и отправить им, заодно обосновав нафига этот функционал нужен в веб-сервере, который можно если что и перезапустить.

     
     
  • 5.25, Какаянахренразница (ok), 13:14, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Но ты всегда можешь написать патч и отправить им

    Могу... Не не могу.

    > нафига этот функционал нужен в веб-сервере, который можно если что и перезапустить.

    А нафига модули нужны в ядре ОС, которое можно если что и перезапустить?

     
     
  • 6.29, Аноним (-), 13:54, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Но ты всегда можешь написать патч и отправить им
    > Могу... Не не могу.

    Можешь купить nginx plus и заплатить за добавление такого функционала.

    >> нафига этот функционал нужен в веб-сервере, который можно если что и перезапустить.
    > А нафига модули нужны в ядре ОС, которое можно если что и
    > перезапустить?

    Затем что веб-сервер перезапускается незаметно для пользователей за время меньше секунды, без разрыва соединений. Вот когда ОС можно будет перезагрузить за время меньше секунды без остановки пользовательского ПО и разрыва соединений - тогда и там можно будет поднять вопрос целесообразности загрузки модулей на лету.

     
     
  • 7.40, Hile (?), 23:45, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Эта откуда такая инфа ? Без разрыва соединений....

    Чет графики коннектов говорят об обратном :)

     
     
  • 8.41, Какаянахренразница (ok), 05:35, 11/02/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Аноним правильно говорит При upgrade запущенный инстанс сервера запускает ещё о... текст свёрнут, показать
     
  • 8.51, XoRe (ok), 15:29, 13/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Без разрыва уже установленных TCP соединений - не совсем верно, конечно Точнее ... текст свёрнут, показать
     
  • 4.26, Аноним (-), 13:14, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > nginx аккуратно перегружается и заново читает конфиг

    Мастер-процесс nginx переносит новые входящие соединения на новый запущенный бинарь воркера, ожидает завершения соединений на старом воркере и его гробит.

     
     
  • 5.27, Какаянахренразница (ok), 13:17, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >> nginx аккуратно перегружается и заново читает конфиг
    > Мастер-процесс nginx переносит новые входящие соединения на новый запущенный бинарь воркера,
    > ожидает завершения соединений на старом воркере и его гробит.

    Да. Поэтому я использовал слово "аккуратно".

     
  • 4.39, Wladmis (ok), 21:38, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Не совсем понятно, что именно происходит внутри инит-скрипта. Пришлось гуглить.

    А почитать init-скрипт?

     
     
  • 5.42, Какаянахренразница (ok), 05:43, 11/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    >> Не совсем понятно, что именно происходит внутри инит-скрипта. Пришлось гуглить.
    > А почитать init-скрипт?

    Я сказал "не совсем понятно" исключительно из вежливости. У меня нет доступа к init-скриптам Анонима и мне, собственно, глубоко пофигу, что у него там написано. В убунтoвском инит-скрипте nginx-a я уже как-то натыкался на баг и с тех пор перегружаю вебсервер без него. Поэтому я хочел узнать, какой командой можно загружать/выгружать модули.

     
  • 2.13, RaSla (?), 07:59, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    В том месте, что теперь вместо разных пакетов(скомпилированных с разным составом модулей):
    nginx
    nginx-full
    nginx-extras
    nginx-light
    и т.д.

    можно будет сделать 1 единственный пакет, который заменяет их все:
    nginx
    А ненужные модули просто НЕ ПОДКЛЮЧАЮТСЯ при (ре)старте сервера

     
     
  • 3.17, Andrey Mitrofanov (?), 09:44, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > В том месте, что теперь вместо разных пакетов(скомпилированных с разным составом модулей):
    > можно будет сделать 1 единственный пакет, который заменяет их все:
    > nginx
    > А ненужные модули просто НЕ ПОДКЛЮЧАЮТСЯ при (ре)старте сервера

    Ждём n2ebable? Скорее бы.

     
     
  • 4.48, myhand (ok), 13:55, 11/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Тебе смишно, а мейнтейнерам пакета с такой расширяемостью как у
    nginx - слезы.  Индеец в этом отношении действительно удобнее, сложно спорить.
     
  • 3.19, Какаянахренразница (ok), 10:03, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Не это делает их динамическими.

    Я не хочу при старте/рестарте сервера. Я хочу динамически. Как из командной строки или из другой программы в произвольный момент времени загрузить/выгрузить произвольный модуль?

     
     
  • 4.23, Аноним (-), 12:30, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Не это делает их динамическими.
    > Я не хочу при старте/рестарте сервера. Я хочу динамически. Как из командной
    > строки или из другой программы в произвольный момент времени загрузить/выгрузить произвольный
    > модуль?

    Динамические в значении dynamic library, а не в значении "загружаю в произвольный момент".

    Если хочется динамически в смысле без рестарта - патчи welcome или fork делай и пили там.

     
  • 4.32, angra (ok), 15:04, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    А что это тебе даст? Ну загрузил ты модуль, болтается он в памяти, дальше что? Неужели непонятно, что пользы от этого без правки конфига практически никакой нет. А если конфиг правишь, то тебе все равно придется сделать reload.
     
     
  • 5.43, Какаянахренразница (ok), 05:56, 11/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > А что это тебе даст? Ну загрузил ты модуль, болтается он в
    > памяти, дальше что? Неужели непонятно, что пользы от этого без правки
    > конфига практически никакой нет. А если конфиг правишь, то тебе все
    > равно придется сделать reload.

    Именно потому, что нельзя изменить параметры работы веб-сервера без перегрузки (а reload это "аккуратная" перезагрузка без даунтайма), я и говорю, что модули не являются динамическими. Если бы можно было попросить веб-сервер заново прочитать конфиг (т.е. изменить параметры своей работы) на лету, совсем без перегрузки, то можно было бы ставить вопрос: "А можно изменить параметры работы веб-сервера без повторного прочтения конфигов?".

    А так, да, в нынешней ситуации мой вопрос не имеет смысла.

     
  • 4.35, Sw00p aka Jerom (?), 15:29, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    не путайте понятие консоли управления и конфиг файл, это вам не циска
     
  • 2.52, XoRe (ok), 15:39, 13/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > И в каком месте он динамический, если его надо прописывать в конфиге
    > и если он загружается в момент запуска? Или можно сделать что-нибудь
    > типа "nginx -s load_module modules/foo.so"?

    Динамический он в том смысле, что слинкован динамически в виде отдельного .so файла, а не статически (внутри главного бинарника).
    В тексте новости так и написано:
    > Модуль оформляется в виде разделяемой библиотеки

    Если что, вот хорошее объяснение:
    О разнице между динамическими и статическими библиотекам
    http://www.amse.ru/courses/cpp2/2010_11_01_lib.html

    Не каждый сервис может подгружать so файлы "на лету".
    Куда проще рестартануть сервис с новым списком библиотек.
    В nginx и так все сделано для очень мягкого и незаметного рестарта.

     

  • 1.12, Аноним (-), 07:43, 10/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Вторая хорошая новость за неделю. Что-то очень плохое теперь должно случиться
     
     
  • 2.14, eRIC (ok), 08:32, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Вторая хорошая новость за неделю. Что-то очень плохое теперь должно случиться

    уже случилось, обновление Java 8u74 :)

     
     
  • 3.15, Аноним (-), 08:38, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    разве она не у вантузятников?
     
     
  • 4.16, Аноним (-), 09:41, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ElasticSearch, Cassandra, PrestoDB и остальная big-data лабудень…
     
  • 2.20, Какаянахренразница (ok), 10:11, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Вторая хорошая новость за неделю. Что-то очень плохое теперь должно случиться

    Чтобы не случилось ничего плохого, после хорошей новости следует совершить жертвоприношение айти-богам.

     
     
  • 3.21, Andrey Mitrofanov (?), 11:59, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Чтобы не случилось ничего плохого, после хорошей новости следует совершить жертвоприношение айти-богам.

    Ритуальный фулл-бэкап, шифрованный 8ью раундами 8Кбитным ключом, в полночь в полнолуние вокруг костра в /dev/null ! Через левое плечо со свитком GPLv3 в правой руке.  //Да, спасибо, регулярно.

     

  • 1.30, CHERTS (??), 14:17, 10/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Модуль https://github.com/kvspb/nginx-auth-ldap тоже собирается для динамической загрузки, но только после правки config к виду http://pastebin.com/6deuf84h
     
     
  • 2.37, cadmi (?), 16:30, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Модуль https://github.com/kvspb/nginx-auth-ldap тоже собирается для динамической загрузки,
    > но только после правки config к виду http://pastebin.com/6deuf84h

    Нормальные люди diff кладут, а не "к виду"

     
     
  • 3.38, CHERTS (??), 16:46, 10/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нормальные люди говорят спасибо, а не нудят.
     
     
  • 4.44, Какаянахренразница (ok), 05:57, 11/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    > Нормальные люди говорят спасибо, а не нудят.

    Спасибо. А можно diff получить? Ещё раз спасибо.

    :-)

     
     
  • 5.45, CHERTS (??), 07:51, 11/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Пожалуйста: https://goo.gl/ZIfZB8
    Или так:
    --- config.orig 2016-02-11 09:36:55.932906200 +0500
    +++ config 2016-02-11 09:41:05.000000000 +0500
    @@ -1,14 +1,16 @@
    ngx_addon_name=ngx_http_auth_ldap_module
    -HTTP_MODULES="$HTTP_MODULES ngx_http_auth_ldap_module"
    -NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_auth_ldap_module.c"

    -CORE_LIBS="$CORE_LIBS -lldap"
    +ngx_module_libs=-lldap

    -case "$NGX_PLATFORM" in
    -    Darwin:*|FreeBSD:*|Linux:*|SunOS:*)
    -        CORE_LIBS="$CORE_LIBS -llber"
    -    ;;
    -esac
    -
    -CFLAGS="$CFLAGS"
    -CFLAGS="$CFLAGS"
    +if [ $ngx_module_link = DYNAMIC ] ; then
    +    ngx_module_name="ngx_http_auth_ldap_module"
    +    ngx_module_srcs="$ngx_addon_dir/ngx_http_auth_ldap_module.c"
    +    . auto/module
    +elif [ $ngx_module_link = YES ] ; then
    +    ngx_module_type=HTTP
    +    ngx_module_name=ngx_http_auth_ldap_module
    +    ngx_module_incs=
    +    ngx_module_deps=
    +    ngx_module_srcs="$ngx_addon_dir/ngx_http_auth_ldap_module.c"
    +    . auto/module
    +fi
     
     
  • 6.46, Какаянахренразница (ok), 10:47, 11/02/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Спасибо.

    Эй, юзер cadmi, барин жалует тебе ейный diff. Прямо с барского плеча. Кланяйся барину. Ну, или хотя бы скажи "спасибо". Как видишь, помогает.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру