Como posso ver com quais sinalizadores o Nginx foi compilado?

227

Como posso verificar quais módulos foram adicionados a uma instalação do nginx?

Nisanio
fonte
7
Outra maneira de dizer isso é "como posso ver com quais bandeiras o Nginx foi compilado?" Só queria adicionar isso para aumentar a capacidade de pesquisa.
Nathan Long

Respostas:

291

nginx -Vlistará todos os módulos configurados. Não há nenhum comando explícito de ativação / carregamento.

Joris
fonte
8
Nota para noobs: Se não logado como usuário root, o comando seriasudo nginx -V
its_me
4
Eu não tinha necessidade de usar sudono Ubuntu 14.04
Asfand Qazi
5
Observe que este parâmetro faz distinção entre maiúsculas e minúsculas. Se você usar minúsculas "-v", obterá apenas o número da versão. Letras maiúsculas "-V" oferecem uma configuração completa, incluindo a lista de todos os módulos usados ​​para compilar o binário do Nginx.
Illidan #
1
Parece que alguns sistemas podem não ter o $PATHconjunto adequado para não-usuários, omitindo todos os sbindiretórios; portanto, pode ser necessário especificar o caminho completo do daemon (por exemplo, /usr/sbin/nginx -V) ou apenas usar sudo.
CNST
@its_me ... você provavelmente não precisa do sudo para executarnginx -V
Carson Reinke
64

Forro único com capacidade de difusão:

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

Conveniente para comparar dois ambientes:

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

EDITAR:

Obrigado, Roman Newaza, por apontar corretamente que isso inclui --withoutsinalizadores de compilação de módulo. Não estou usando --withoutsinalizadores e estava apenas focado em obter a lista de módulos, então não entendi; o one-liner pode ser modificado para ajudar a diferenciar compilar sinalizadores entre 2 instalações, assim:

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

que é o mesmo que:

2>&1 nginx -V | xargs -n1

Talvez também faça isso sortpara normalizar a ordem idiossincrática de sinalizadores de compilação e trnovamente para dividir atribuições em linhas diferentes. Resultado final:

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

Isso funciona se sorto mesmo se comportar nos dois hosts remotos (ou seja, ambos são GNU ou BSD). Se você estiver comparando Linux com BSD (Mac OS X), basta mover a | sort | tr = '\n'peça lsmodnpara o shell local, onde 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')

Mais bagunçado, mas funciona.

al-x
fonte
2
2>&1 nginx -V | tr -- - '\n' | grep _moduleO comando está totalmente errado, pois lista sem- * as opções instaladas!
Roman Newaza 28/03
resposta incrível. por que você coloca 2> & 1 na frente. pelo que eu vi isso é mais incomum?
cavalcade
O @MattTagg fica apenas na frente até ser usado. Então é no final de qualquer comando.
kmarsh
3
  • O nginx -Vcomando (V maiúsculo) listará todos os módulos, bem como outras opções em tempo de compilação:

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

    Observe que nunca há necessidade sudodeste comando, pois os poderes de superusuário seriam necessários apenas pelo nginx para abrir portas abaixo IPPORT_RESERVED(por exemplo, portas abaixo de 1024) e / ou determinados arquivos de log para gravação.

    No entanto, dependendo das suas $PATHconfigurações, você pode precisar especificar o caminho completo - por exemplo /usr/sbin/nginx -V, ou realmente usar sudopara que o /sbin/diretório apropriado seja incluído no arquivo $PATH.

  • A partir das versões mais recentes do nginx - desde nginx 1.9.11(fevereiro de 2016) - os módulos dinamicamente carregáveis ​​agora também são suportados - http://nginx.org/r/load_module - com a ajuda da load_modulediretiva.

cnst
fonte
1

nginx -V não mostra todos os módulos, mostra cerca de 20 módulos para mim.

Eu uso o strings /usr/sbin/nginx|grep _module|grep -v configure| sortque lista todos os mais de 200 módulos no meu nginx.

Eu também tentei, objdumpmas parece que o nginx na minha instalação teve o binário removido.

imel96
fonte