Comment voir avec quels drapeaux Nginx a été compilé?

227

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

Nisanio
la source
7
Une autre façon de dire cela est "comment puis-je voir avec quels drapeaux Nginx a été compilé?" Je voulais juste ajouter cela pour augmenter la capacité de recherche.
Nathan Long

Réponses:

291

nginx -Vlistera tous les modules configurés. Il n'y a pas de commande d'activation / chargement explicite.

Joris
la source
8
Note pour noobs: Si non connecté en tant qu'utilisateur root, la commande seraitsudo nginx -V
its_me
4
Je n'ai pas eu besoin d'utiliser sudoUbuntu 14.04
Asfand Qazi
5
Veuillez noter que ce paramètre est sensible à la casse. Si vous utilisez des minuscules "-v", vous n'obtiendrez que le numéro de version. Les majuscules "-V" vous donnent une configuration complète incluant la liste de tous les modules utilisés pour compiler le binaire Nginx.
Illidan
1
Il semble que certains systèmes ne disposent peut-être pas de l' $PATHensemble défini pour les non-utilisateurs, omettant tous les sbinrépertoires. Vous devrez donc peut-être spécifier le chemin complet du démon (par exemple, /usr/sbin/nginx -V) ou simplement l'utiliser sudo.
cnst
@its_me ... vous n'avez probablement pas besoin de sudo pour courirnginx -V
Carson Reinke
64

Diffilable one-liner:

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 inclut --withoutles indicateurs de compilation de module. Je n'utilise pas de --withoutdrapeaux et je voulais juste obtenir la liste des modules, alors je ne l'ai pas comprise. one-liner peut être modifié pour faciliter la compilation des drapeaux entre 2 installations, comme ceci:

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

qui est le même que:

2>&1 nginx -V | xargs -n1

Peut-être aussi dirigerez-vous cela sortpour normaliser l'ordre particulier d'indicateurs de compilation et trdiviser à nouveau les affectations sur des lignes différentes. 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 le sortcomportement est le même sur les deux hôtes distants (c’est-à-dire qu’ils sont à la fois GNU ou BSD). Si vous comparez Linux à BSD (Mac OS X), déplacez simplement l' | sort | tr = '\n'élément lsmodnvers le shell local où sortil 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.

al-x
la source
2
2>&1 nginx -V | tr -- - '\n' | grep _moduleLa commande est totalement fausse car elle liste les options sans- * telles qu'installées!
Roman Newaza
réponse géniale. par intérêt, pourquoi mettez-vous 2> et 1 devant. d'après ce que j'ai vu c'est plus inhabituel?
Cavalcade
@ MattTagg c'est seulement devant jusqu'à ce qu'il soit utilisé. Ensuite, c'est à la fin de l'une ou l'autre commande.
kmarsh
3
  • La nginx -Vcommande (V majuscule) 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 que sudocette commande n’est jamais nécessaire , car nginx n’aurait besoin que des pouvoirs de superutilisateur pour ouvrir les ports situés au-dessous IPPORT_RESERVED(par exemple, les ports inférieurs à 1024) et / ou certains fichiers journaux en écriture.

    Toutefois, en fonction de vos $PATHparamètres, vous devrez peut-être spécifier le chemin complet - par exemple /usr/sbin/nginx -V, ou bien utiliser sudopour que le /sbin/répertoire approprié soit inclus dans le fichier $PATH.

  • À partir des nouvelles versions de nginx - depuis nginx 1.9.11(février 2016) - les modules chargeables dynamiquement sont désormais également pris en charge - http://nginx.org/r/load_module - à l'aide de la load_moduledirective.

cnst
la source
1

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| sortqui répertorie plus de 200 modules dans mon nginx.

J'ai aussi essayé, objdumpmais on dirait que le nginx de mon installation a dépouillé le binaire.

imel96
la source