Как я могу увидеть, с какими флагами был скомпилирован Nginx?
Как я могу проверить, какие модули были добавлены в установку nginx?
4 ответа
nginx -V
перечислит все настроенные модули. Нет явной команды включения / загрузки.
Отличная однострочность:
2>&1 nginx -V | tr -- - '\n' | grep _module
Удобно для сравнения двух сред:
lsmodn="2>&1 nginx -V | tr -- - '\n' | grep _module"
diff -y <(ssh www-prd eval $lsmodn) <(ssh www-qa eval $lsmodn)
РЕДАКТИРОВАТЬ:
Спасибо, Роман Ньюаза, за то, что правильно указал, что это включает --without
модуль компиляции флагов. Я не пользуюсь --without
флаги и был просто сфокусирован на получении списка модулей, так что я не уловил этого; однострочник может быть изменен, чтобы помочь разным флагам компиляции между двумя установками, например так:
2>&1 nginx -V | tr ' ' '\n'
что так же, как:
2>&1 nginx -V | xargs -n1
Может быть, также через это sort
нормализовать своеобразное упорядочение флагов компиляции и tr
снова разделить назначения на труднодоступные линии. Конечный результат:
lsmodn="2>&1 nginx -V | xargs -n1 | sort | tr = '\n'"
diff -y <(ssh www-prd eval $lsmodn) <(ssh www-qa eval $lsmodn)
Это работает, если sort
ведет себя одинаково на обоих удаленных хостах (т.е. они оба GNU или BSD). Если вы сравниваете Linux с BSD (Mac OS X), просто переместите | sort | tr = '\n'
кусок из lsmodn
к местной оболочке, где sort
будет соответствовать:
lsmodn="2>&1 nginx -V | xargs -n1"
diff -y <(ssh linux eval $lsmodn | sort | tr = '\n') <(ssh macosx eval $lsmodn | sort | tr = '\n')
Мессье, но это работает.
nginx -V
не показывает все модули, он показывает около 20 модулей для меня.
я использую strings /usr/sbin/nginx|grep _module|grep -v configure| sort
который перечисляет все 200+ модулей в моем nginx.
Я тоже пробовал objdump
но похоже, что nginx в моей установке удалил бинарный файл.
nginx -V
Команда (в верхнем регистре V) выведет список всех модулей, а также другие параметры времени компиляции:%nginx -V nginx version: nginx/1.2.2 built by gcc 4.2.1 20070719 TLS SNI support enabled configure arguments: --prefix=/var/www --conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/sbin/nginx --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-log-path=logs/access.log --error-log-path=logs/error.log --http-client-body-temp-path=/var/www/cache/client_body_temp --http-proxy-temp-path=/var/www/cache/proxy_temp --http-fastcgi-temp-path=/var/www/cache/fastcgi_temp --http-scgi-temp-path=/var/www/cache/scgi_temp --http-uwsgi-temp-path=/var/www/cache/uwsgi_temp --user=www --group=www --with-http_gzip_static_module --with-http_ssl_module --with-http_stub_status_module --with-ipv6 --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module %
Обратите внимание, что никогда не нужно
sudo
для этой команды, поскольку полномочия суперпользователя понадобятся только nginx для открытия портов нижеIPPORT_RESERVED
(например, порты ниже 1024) и / или определенные лог-файлы для записи.Тем не менее, в зависимости от вашего
$PATH
В настройках может потребоваться указать полный путь - например,/usr/sbin/nginx -V
или действительно использоватьsudo
за наличие соответствующего/sbin/
каталог будет включен в$PATH
,Начиная с более новых выпусков nginx - с
nginx 1.9.11
(Февраль 2016 г.) - теперь поддерживаются динамически загружаемые модули - http://nginx.org/r/load_module - с помощьюload_module
директивы.