Як я можу побачити, з якими прапорами було складено Nginx?


227

Як я можу перевірити, які модулі були додані до установки nginx?


7
Ще один спосіб сказати це: "як я бачу, з якими прапорами був складений Nginx?" Просто хотів додати це, щоб збільшити пошук.
Натан Лонг

Відповіді:


291

nginx -Vвідобразить список всіх налаштованих модулів. Немає явної команди включення / завантаження.


8
Примітка для noobs: Якщо ви не ввійшли в систему як користувач root, то командою було бsudo nginx -V
its_me

4
Мені не потрібно було користуватися sudoна Ubuntu 14.04
Asfand Qazi

5
Зверніть увагу, що цей параметр враховує регістри. Якщо ви використовуєте малі регістри "-v", ви отримаєте лише номер версії. Верхній регістр "-V" дає повну конфігурацію, включаючи перелік усіх модулів, що використовуються для компіляції бінарних файлів Nginx.
Іллідан

1
Здається, що деякі системи можуть не мати $PATHналежного набору для не надрукованих користувачів, опускаючи всі sbinкаталоги, тому вам, можливо, доведеться вказати повний шлях демона (наприклад, /usr/sbin/nginx -V) або взагалі просто використовувати sudo.
cnst

@its_me ... вам, певно, не потрібно судо для запускуnginx -V
Карсон Рейнке

64

Відмінна однолінійка:

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')

Мессьє, але це працює.


2
2>&1 nginx -V | tr -- - '\n' | grep _moduleкоманда абсолютно неправильна, оскільки вона містить список встановлених опцій без *!
Роман Ньюаза

приголомшлива відповідь. з інтересу, чому ви ставите 2> і 1 попереду. з того, що я бачив, це більш незвичне?
кавалькада

@MattTagg це лише спереду, поки не буде використано. Тоді це в кінці будь-якої команди.
kmarsh

3
  • 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директиви.


1

nginx -V показує не всі модулі, він показує приблизно 20 модулів для мене.

Я використовую strings /usr/sbin/nginx|grep _module|grep -v configure| sortякий перераховує всі 200+ модулів у моїй nginx.

Я також спробував, objdumpале схоже, що в nginx у моїй установці було знято бінарний файл.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.