Come posso vedere con quali flag è stato compilato Nginx?


227

Come posso verificare quali moduli sono stati aggiunti a un'installazione nginx?


7
Un altro modo di dire questo è "come posso vedere con quali flag è stato compilato Nginx?" Volevo solo aggiungere questo per aumentare la ricerca.
Nathan Long,

Risposte:


291

nginx -Velencherà tutti i moduli configurati. Non esiste un comando esplicito di abilitazione / caricamento.


8
Nota per Noobs: se non si è effettuato l'accesso come utente root, il comando sarebbesudo nginx -V
its_me

4
Non avevo bisogno di usare sudosu Ubuntu 14.04
Asfand Qazi l'

5
Si noti che questo parametro fa distinzione tra maiuscole e minuscole. Se usi la minuscola "-v" otterrai solo il numero di versione. Le lettere maiuscole "-V" forniscono una configurazione completa, incluso l'elenco di tutti i moduli utilizzati per la compilazione del binario Nginx.
Illidan,

1
Sembra che alcuni sistemi potrebbero non avere il $PATHset correttamente per i non superutenti, omettendo tutte le sbindirectory, quindi, potresti dover specificare il percorso completo del demone (ad esempio, /usr/sbin/nginx -V), o semplicemente usare sudo.
primo

@its_me ... probabilmente non hai bisogno di sudo per correrenginx -V
Carson Reinke il

64

One-liner diffondibile:

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

Conveniente per confrontare due ambienti:

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

MODIFICARE:

Grazie, Roman Newaza, per aver correttamente sottolineato che questo include --withoutflag di compilazione dei moduli. Non sto usando le --withoutbandiere e mi sono concentrato solo su come ottenere l'elenco dei moduli, quindi non l'ho preso; il one-liner può essere modificato per facilitare la compilazione di flag tra 2 installazioni, in questo modo:

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

che è lo stesso di:

2>&1 nginx -V | xargs -n1

Forse anche passare attraverso questo sortper normalizzare l'ordinamento idiosincratico dei flag di compilazione e di trnuovo per dividere le assegnazioni su linee diffondibili. Risultato finale:

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

Funziona se sortsi comporta allo stesso modo su entrambi gli host remoti (cioè sono entrambi GNU o BSD). Se stai confrontando Linux con BSD (Mac OS X), sposta il | sort | tr = '\n'pezzo fuori lsmodndalla shell locale dove sortsarà coerente:

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

Più disordinato, ma funziona.


2
2>&1 nginx -V | tr -- - '\n' | grep _moduleil comando è totalmente sbagliato in quanto elenca senza- * opzioni installate!
Roman Newaza,

risposta fantastica. per interesse perché metti 2> & 1 in primo piano. da quello che ho visto è più insolito?
cavalcata

@MattTagg è solo di fronte fino a quando non viene utilizzato. Quindi è alla fine di entrambi i comandi.
kmarsh

3
  • Il nginx -Vcomando (V maiuscola) elencherà tutti i moduli, oltre ad altre opzioni di compilazione:

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

    Si noti che non è mai necessario per sudoquesto comando, poiché i poteri dei superutente sarebbero necessari solo per nginx per l'apertura delle porte sottostanti IPPORT_RESERVED(ad es. Porte inferiori a 1024) e / o determinati file di registro per la scrittura.

    Tuttavia, a seconda delle $PATHimpostazioni, potrebbe essere necessario specificare il percorso completo, ad esempio /usr/sbin/nginx -V, oppure utilizzare effettivamente sudoper /sbin/includere la directory appropriata in $PATH.

  • A partire dalle nuove versioni di nginx - da nginx 1.9.11(febbraio 2016) - ora sono supportati anche i moduli caricabili dinamicamente - http://nginx.org/r/load_module - con l'aiuto della load_moduledirettiva.


1

nginx -V non mostra tutti i moduli, mostra circa 20 moduli per me.

Uso quello strings /usr/sbin/nginx|grep _module|grep -v configure| sortche elenca tutti i 200+ moduli nel mio nginx.

Ho anche provato, objdumpma sembra che il nginx nella mia installazione avesse il binario rimosso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.