Jak mogę sprawdzić, z którymi flagami skompilowano Nginx?

227

Jak mogę sprawdzić, które moduły zostały dodane do instalacji Nginx?

Nisanio
źródło
7
Innym sposobem powiedzenia tego jest „jak mogę zobaczyć, z którymi flagami skompilowano Nginx?” Chciałem tylko to dodać, aby zwiększyć możliwości wyszukiwania.
Nathan Long

Odpowiedzi:

291

nginx -Vwyświetli listę wszystkich skonfigurowanych modułów. Nie ma wyraźnego polecenia włączenia / ładowania.

Joris
źródło
8
Uwaga dla noobów: Jeśli nie zalogujesz się jako użytkownik root, poleceniem byłobysudo nginx -V
its_me
4
Nie musiałem używać sudona Ubuntu 14.04
Asfand Qazi
5
Uwaga: w tym parametrze rozróżniana jest wielkość liter. Jeśli użyjesz małych liter „-v”, otrzymasz tylko numer wersji. Wielkie litery „-V” zapewniają pełną konfigurację, w tym listę wszystkich modułów używanych do kompilacji pliku binarnego Nginx.
Illidan,
1
Wygląda na to, że niektóre systemy mogą nie mieć $PATHpoprawnie ustawionego zestawu dla superużytkowników, pomijając wszystkie sbinkatalogi, więc może być konieczne określenie pełnej ścieżki demona (np. /usr/sbin/nginx -V) Lub użycie sudo.
cnst
@its_me ... prawdopodobnie nie potrzebujesz sudo do uruchomienianginx -V
Carson Reinke
64

Jednowarstwowa z możliwością różnicowania:

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

Wygodny w porównaniu dwóch środowisk:

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

EDYTOWAĆ:

Dziękujemy Roman Newaza za prawidłowe wskazanie, że obejmuje to --withoutflagi kompilacji modułów. Nie używam --withoutflag i skupiłem się na uzyskaniu listy modułów, więc nie złapałem tego; jednolinijkę można zmodyfikować, aby pomóc w kompilowaniu flag między dwiema instalacjami, w następujący sposób:

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

który jest taki sam jak:

2>&1 nginx -V | xargs -n1

Być może przepuszczymy to, sortaby znormalizować idiosynkratyczne porządkowanie flag kompilacji i trponownie podzielić przypisania na trudne linie. Ostateczny wynik:

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

Działa to, jeśli sortzachowuje się tak samo na obu zdalnych hostach (tj. Oba są GNU lub BSD). Jeśli porównujesz Linuksa z BSD (Mac OS X), po prostu przenieś | sort | tr = '\n'kawałek lsmodndo lokalnej powłoki, gdzie sortbędzie spójny:

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

Messier, ale działa.

al-x
źródło
2
2>&1 nginx -V | tr -- - '\n' | grep _modulepolecenie jest całkowicie niepoprawne, ponieważ wyświetla listę bez zainstalowanych opcji *.
Roman Newaza
niesamowita odpowiedź. poza zainteresowaniem, dlaczego umieszczasz 2> i 1 z przodu. z tego, co widziałem, jest to bardziej niezwykłe?
kawalkada
@MattTagg jest tylko z przodu, dopóki nie zostanie użyty. Potem jest na końcu każdego polecenia.
kmarsh
3
  • nginx -VPoleceń (dużymi literami V) będzie lista wszystkich modułów, jak również inne opcje kompilacji:

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

    Zauważ, że to polecenie nigdy nie jest potrzebne sudo, ponieważ uprawnienia superużytkownika byłyby potrzebne tylko dla nginx do otwierania portów poniżej IPPORT_RESERVED(np. Portów poniżej 1024) i / lub niektórych plików dziennika do zapisu.

    Jednak w zależności od $PATHustawień może być konieczne podanie pełnej ścieżki - np. /usr/sbin/nginx -VLub użycie sudodo włączenia odpowiedniego /sbin/katalogu do katalogu $PATH.

  • Począwszy od nowszych wersji nginx - od nginx 1.9.11(luty 2016 r.) - obsługiwane są teraz także moduły dynamicznie ładowane - http://nginx.org/r/load_module - przy pomocy load_moduledyrektywy.

cnst
źródło
1

nginx -V nie pokazuje wszystkich modułów, pokazuje dla mnie około 20 modułów.

Używam, strings /usr/sbin/nginx|grep _module|grep -v configure| sortktóry wyświetla listę wszystkich ponad 200 modułów w moim nginx.

Próbowałem też, objdumpale wygląda na to, że nginx w mojej instalacji miał plik binarny usunięty.

imel96
źródło