Wie kann ich sehen, mit welchen Flags Nginx kompiliert wurde?

227

Wie kann ich überprüfen, welche Module zu einer Nginx-Installation hinzugefügt wurden?

Nisanio
quelle
7
Eine andere Art zu sagen ist "Wie kann ich sehen, mit welchen Flags Nginx kompiliert wurde?" Ich wollte das nur hinzufügen, um die Durchsuchbarkeit zu verbessern.
Nathan Long

Antworten:

291

nginx -Vlistet alle konfigurierten Module auf. Es gibt keinen expliziten Befehl zum Aktivieren / Laden.

Joris
quelle
8
Hinweis für Noobs: Wenn Sie nicht als Root angemeldet sind, sudo nginx -V
lautet
4
Ich musste nicht sudoauf Ubuntu 14.04
Asfand Qazi
5
Bitte beachten Sie, dass dieser Parameter zwischen Groß- und Kleinschreibung unterscheidet. Wenn Sie Kleinbuchstaben "-v" verwenden, erhalten Sie nur die Versionsnummer. Großbuchstaben "-V" gibt Ihnen die vollständige Konfiguration einschließlich der Liste aller Module, die zum Kompilieren von Nginx-Binärdateien verwendet werden.
Illidan
1
Es sieht so aus, als ob auf einigen Systemen die $PATHEinstellung für Nicht-Superuser möglicherweise nicht richtig ist sbin, wenn alle Verzeichnisse weggelassen werden. Daher müssen Sie möglicherweise den vollständigen Pfad des Daemons angeben (z. B. /usr/sbin/nginx -V) oder nur verwenden sudo.
26.
@its_me ... du brauchst wahrscheinlich kein sudo um zu rennennginx -V
Carson Reinke
64

Schwieriger Einzeiler:

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

Praktisch für den Vergleich zweier Umgebungen:

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

BEARBEITEN:

Vielen Dank, Roman Newaza, dass Sie richtig darauf hingewiesen haben, dass dies auch --withoutFlaggen zum Kompilieren von Modulen enthält . Ich benutze keine --withoutFlags und habe mich nur darauf konzentriert, die Modulliste zu erhalten, also habe ich das nicht verstanden. Der Einzeiler kann geändert werden, um das Kompilieren von Flags zwischen zwei Installationen zu erleichtern:

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

das ist das gleiche wie:

2>&1 nginx -V | xargs -n1

Vielleicht leiten Sie das auch durch sort, um die idiosynkratische Reihenfolge der Kompilierungsflags zu normalisieren und trdie Zuweisungen erneut auf verschiedene Zeilen aufzuteilen. Endergebnis:

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

Das funktioniert, wenn sortsich beide Remote-Hosts gleich verhalten (dh beide sind GNU oder BSD). Wenn Sie Linux auf BSD (Mac OS X) vergleichen, nur das bewegt | sort | tr = '\n'Stück aus lsmodnauf dem lokal Shell , in sortEinklang stehen wird:

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

Messier, aber es funktioniert.

al-x
quelle
2
2>&1 nginx -V | tr -- - '\n' | grep _moduleBefehl ist völlig falsch, da er ohne installierte * Optionen auflistet!
Roman Newaza
tolle Antwort. aus interesse warum stellst du 2> & 1 voran. von dem, was ich gesehen habe, ist das ungewöhnlicher?
Cavalcade
@MattTagg es ist nur vorne, bis es verwendet wird. Dann ist es am Ende eines der beiden Befehle.
kmarsh
3
  • Der nginx -VBefehl (V in Großbuchstaben) listet alle Module sowie andere Optionen zur Kompilierungszeit auf:

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

    Beachten Sie, dass sudofür diesen Befehl keine Notwendigkeit besteht , da Superuser-Berechtigungen nur von nginx zum Öffnen von Ports unter IPPORT_RESERVED(z. B. Ports unter 1024) und / oder bestimmten Protokolldateien zum Schreiben benötigt werden.

    Abhängig von Ihren $PATHEinstellungen müssen Sie jedoch möglicherweise entweder den vollständigen Pfad angeben - z. B. /usr/sbin/nginx -Voder sudodas entsprechende /sbin/Verzeichnis in das Verzeichnis einfügen $PATH.

  • Ab neueren nginx-Releases - seit nginx 1.9.11(Februar 2016) - werden nun auch dynamisch ladbare Module unterstützt - http://nginx.org/r/load_module - mit Hilfe der load_moduleDirektive.

cnst
quelle
1

nginx -V zeigt nicht alle Module, es zeigt etwa 20 Module für mich.

Ich benutze strings /usr/sbin/nginx|grep _module|grep -v configure| sortdie Liste aller 200+ Module in meinem Nginx.

Ich habe es auch versucht, objdumpaber es sieht so aus, als hätte der Nginx in meiner Installation die Binärdatei entfernt.

imel96
quelle