web-dev-qa-db-fra.com

Comment puis-je voir avec quels drapeaux Nginx a été compilé?

Comment puis-je vérifier quels modules ont été ajoutés à une installation nginx?

236
Nisanio

nginx -V listera tous les modules configurés. Il n'y a pas de commande explicite enable/load.

299
Joris

Doublure à une couche:

2>&1 nginx -V | tr -- - '\n' | grep _module

Pratique pour comparer deux environnements:

lsmodn="2>&1 nginx -V | tr -- - '\n' | grep _module"
diff -y <(ssh www-prd eval $lsmodn) <(ssh www-qa eval $lsmodn)

MODIFIER:

Merci, Roman Newaza, d'avoir correctement indiqué que cela comprend --without module compile les drapeaux. Je n'utilise pas --without flags et était juste concentré sur l'obtention de la liste des modules, donc je n'ai pas compris cela; le one-liner peut être modifié pour aider à compiler les drapeaux entre 2 installations, comme ceci:

2>&1 nginx -V | tr ' '  '\n'

ce qui équivaut à:

2>&1 nginx -V | xargs -n1

Peut-être aussi canaliser cela à travers sort pour normaliser l'ordre idiosyncrasique des drapeaux de compilation et tr à nouveau pour diviser les affectations sur des lignes diff-able. Résultat final:

lsmodn="2>&1 nginx -V | xargs -n1 | sort | tr = '\n'"
diff -y <(ssh www-prd eval $lsmodn) <(ssh www-qa eval $lsmodn)

Cela fonctionne si sort se comporte de la même manière sur les deux hôtes distants (c'est-à-dire qu'ils sont tous les deux GNU ou BSD). Si vous comparez Linux à BSD (Mac OS X), juste Bouge le | sort | tr = '\n' morceau de lsmodn vers le shell local où sort sera cohérent:

lsmodn="2>&1 nginx -V | xargs -n1"
diff -y <(ssh linux eval $lsmodn | sort | tr = '\n') <(ssh macosx eval $lsmodn  | sort | tr = '\n')

Messier, mais ça marche.

66
al-x
  • La commande nginx -V (Majuscule V) listera tous les modules, ainsi que d'autres options de compilation:

    %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 %

    Notez qu'il n'y a jamais besoin de Sudo pour cette commande, car les pouvoirs de superutilisateur ne seraient nécessaires que par nginx pour ouvrir les ports en dessous IPPORT_RESERVED (Par exemple , ports inférieurs à 1024) et/ou certains fichiers journaux pour l'écriture.

    Cependant, selon vos paramètres $PATH, Vous devrez peut-être spécifier le chemin complet - par exemple, /usr/sbin/nginx -V, Ou bien utiliser Sudo pour avoir le /sbin/ soit inclus dans le $PATH.

  • À partir des versions plus récentes de nginx - depuis nginx 1.9.11 (Février 2016) - les modules chargeables dynamiquement sont désormais pris en charge , aussi - http://nginx.org/r/load_module - à l'aide de la directive load_module.

3
cnst

nginx -V ne montre pas tous les modules, il montre environ 20 modules pour moi.

J'utilise strings /usr/sbin/nginx|grep _module|grep -v configure| sort qui répertorie tous les 200+ modules de mon nginx.

J'ai également essayé objdump mais il semble que le nginx de mon installation ait supprimé le binaire.

2
imel96