Pull to refresh

Comments 24

UFO landed and left these words here
До появления динамических модулей у меня бывали ситуации:
«ооо, какую крутая штука. Ммм, да она еще и это умеет, надо попробовать ее на своем sandbox-сервере. Черт! Там же nginx надо пересобирать для этого. Нее, тогда не охота.»

Вот ведь магия самовнушения. =) В статье вы сделали ровно то же самое — пересобрали nginx с новыми модулями, но на этот раз вам этот процесс не показался сложным.

Главная идея в том, чтобы не ставить второй nginx в другое место, не настраивать его заново, а просто добавить модули в существующий, обычно устанавливаемый с репозитория.

Так это делается просто копированием параметров сборки существующего nginx, и всегда делалось. Формат вывода команды nginx -V специально для этого предназначен.

… а как потом его обновлять? Каждый раз вручную рекомпилить вместо обычного aptitude upgrade

У автора в статье эта проблема тоже никак не решена. Модули, собранные с другой версией nginx, не загрузятся в новую.

А чем этот способ отличается от статической пересборки? Здесь в конце также подменяются бинарные файлы и самого nginx. Соответственно установка из репозитария не имеет смысла, кроме как подсмотреть строку компиляции.
Это гораздо проще, т.к. не надо прописывать вручную пути, где будет лежать nginx, его конфиг и т.д.
Т.е. поставил nginx из репы, добавил модули и все. При этом по факту, версия остается та же, только добавляются модули.
Ну и конечно, по большей части эта инструкция для тех, у кого уже установлен nginx и надо добавить пару модулей, ничего не сломав.

Замечу, что все то же самое верно и в случае статических модулей, заменить только --add-dynamic-module на --add-module и не нужны будут лишние строчки в конфиге.


В вашем описании вы никак не используете приемущества динамических модулей.

Если не сложно, напишите статью как по полной можно использовать приемущества динамических модулей.
Для того, чтобы использовать преимущества по полной, сначала нужно зафиксировать API со стороны NGINX :) Вот тогда будет как в апаче, настоящая плагинная система. Но это очень сложно, т.к. не предусматривалось изначально. С другой стороны, пересобирать не так уж и сложно, а монолитно собранные бинарники в продакшене даже лучше, чем наборы с плагинами (иммутабельность и всё такое).

Динамические модули нужны в двух случаях:


  1. Вы автор коммерческого модуля с закрытым исходным кодом хотите собрать свой модуль для коммерческой версии NGINX Plus;
  2. Когда нужно в репозитории поставлять nginx с разным набором модулей. В первую очередь это интересно, когда некоторые модули требуют внешние зависимости и вы не хотите пользователей заставлять их устанавливать, если они им не нужны. В таком случае, вместо сборки множества разных пакетов nginx с разными комбинациями модулей, достаточно собрать один пакет с nginx и дополнительные пакеты с отдельными модулями.

Большинству же обычных пользователей никакой особой пользы от самостоятельной сборки динамических модулей нет.

Если честно, какое-то корявое описание процесса, которое ни разу не показывает профита от динамических модулей.


По идее там должно просто инфраструктура сборочной системы nginx использоваться, и собирать только отдельный модуль. Тут ещё понятно требования иметь правильную версию исходников.

Не обязательно полностью собирать nginx, можно запустить make только для модулей:
make modules
Да, вы правы! Не знал об этом, дополню статью.
А зачем делать make install? Насколько я понимаю, nginx установленный из репозитария уже имеет поддержку динамических модулей. Значит хватит только make и потом скомпилированный модуль положить в нужную директорию с модулями + прописать загрузку модуля в конфиге.
Или я что-то не понял в описании модулей nginx?

Вы всё правильно поняли.

Вообще жду с нетерпением всех модулей для nginx в репозитариях! А то привык в FreeBSD make config и отметил что нужно — красота! А в Линуксах приходится ручками всё делать.
Тут просто сделать make install быстрее. Он заменит сам nginx точно таким же + скопирует сам модули. Быстрее и проще. Если не хотите, чтобы ваш nginx менялся на только что скомпилированный — можете вручную копировать модули, само собой.
Тогда проще как писали выше сделать make modules и потом make install чтобы только модули были установлены. Опять же в этом случае не нужно будет конфигурить как в nginx -V, а просто добавить лишь нужные модули и их потом скомпилировать и установить.
Конфигурировать нужно будет, иначе nginx эти модули не примет. А по поводу make modules — я статью поправил, все-таки компилить отдельно модули более корректно.
sudo make install

checkinstall, раз уж deb-based. Причем в предложенном ZAZmaster варианте с make modules это даст пакет с модулями (если make install, конечно, не ставит ещё что-нибудь при этом).

А пакет с модулями уже можно будет распространить на остальные свои сервера.
Only those users with full accounts are able to leave comments. Log in, please.