¿Cómo puedo ver con qué banderas se compiló Nginx?

227

¿Cómo puedo verificar qué módulos se han agregado a una instalación nginx?

Nisanio
fuente
77
Otra forma de decir esto es "¿cómo puedo ver con qué banderas se compiló Nginx?" Solo quería agregar eso para aumentar la capacidad de búsqueda.
Nathan Long

Respuestas:

291

nginx -Venumerará todos los módulos configurados. No hay un comando explícito de habilitar / cargar.

Joris
fuente
8
Nota para los novatos: si no ha iniciado sesión como usuario root, el comando seríasudo nginx -V
its_me
44
No necesitaba usar sudoUbuntu 14.04
Asfand Qazi
55
Tenga en cuenta que este parámetro distingue entre mayúsculas y minúsculas. Si usa minúsculas "-v" obtendrá solo el número de versión. Las mayúsculas "-V" le brindan una configuración completa que incluye una lista de todos los módulos utilizados para compilar el binario Nginx.
Illidan
1
Parece que algunos sistemas pueden no tener el $PATHconjunto adecuado para los no superusuarios, omitiendo todos los sbindirectorios, por lo tanto, es posible que deba especificar la ruta completa del demonio (por ejemplo, /usr/sbin/nginx -V), o simplemente usarlo sudo.
Cnst
@its_me ... probablemente no necesites sudo para corrernginx -V
Carson Reinke
64

One-liner diferenciable:

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

Conveniente para comparar dos entornos:

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

EDITAR:

Gracias, Roman Newaza, por señalar correctamente que esto incluye --withoutindicadores de compilación del módulo. No estoy usando --withoutbanderas y solo estaba enfocado en obtener la lista de módulos, así que no entendí eso; el one-liner se puede modificar para ayudar a diferenciar las banderas de compilación entre 2 instalaciones, de esta manera:

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

que es lo mismo que:

2>&1 nginx -V | xargs -n1

Quizás también canalice eso sortpara normalizar el ordenamiento idiosincrásico de los indicadores de compilación y trnuevamente para dividir las tareas en líneas divisibles. Resultado final:

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

Eso funciona si se sortcomporta igual en ambos hosts remotos (es decir, ambos son GNU o BSD). Si está comparando Linux con BSD (Mac OS X), simplemente mueva la | sort | tr = '\n'pieza lsmodnal shell local donde sortserá consistente:

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

Más desordenado, pero funciona.

al-x
fuente
2
2>&1 nginx -V | tr -- - '\n' | grep _module¡El comando es totalmente incorrecto ya que enumera sin- * opciones instaladas!
Roman Newaza
respuesta asombrosa fuera de interés, ¿por qué pones 2> y 1 al frente? por lo que he visto, ¿eso es más inusual?
Cabalgata del
@MattTagg solo está en frente hasta que se use. Luego está al final de cualquiera de los comandos.
kmarsh
3
  • El nginx -Vcomando (V mayúscula) enumerará todos los módulos, así como otras opciones de tiempo de compilación:

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

    Tenga en cuenta que sudoeste comando nunca es necesario , ya que nginx solo necesitaría poderes de superusuario para abrir puertos inferiores IPPORT_RESERVED(por ejemplo, puertos inferiores a 1024) y / o ciertos archivos de registro para escribir.

    Sin embargo, dependiendo de su $PATHconfiguración, es posible que deba especificar la ruta completa, por ejemplo /usr/sbin/nginx -V, o usarla sudopara que /sbin/se incluya el directorio apropiado en el $PATH.

  • Comenzando con las nuevas versiones de nginx, desde nginx 1.9.11(febrero de 2016), ahora también se admiten módulos cargables dinámicamente , http://nginx.org/r/load_module , con la ayuda de la load_moduledirectiva.

cnst
fuente
1

nginx -V no muestra todos los módulos, muestra unos 20 módulos para mí.

Yo uso el strings /usr/sbin/nginx|grep _module|grep -v configure| sortque enumera todos los más de 200 módulos en mi nginx.

También lo intenté objdumppero parece que el nginx en mi instalación tenía el binario eliminado.

imel96
fuente