220

How can I check what modules have been added to an nginx installation?

  • 6
    Another way of saying this is "how can I see which flags Nginx was compiled with?" Just wanted to add that to increase searchability. – Nathan Long Feb 20 '12 at 17:37
278

nginx -V will list all the configured modules. There is no explicit enable/load command.

  • 7
    Note for noobs: If not logged in as root user, the command would be sudo nginx -V – its_me Feb 8 '13 at 4:08
  • 4
    I did not need to use sudo on Ubuntu 14.04 – Asfand Qazi Jun 11 '15 at 14:53
  • 4
    Please note that this parameter is case sensitive. If you use lower case "-v" you will get only version number. Upper case "-V" gives you complete configuration including list of all modules used for compiling Nginx binary. – Illidan Nov 6 '16 at 7:43
  • It seems like some systems may not have the $PATH set properly for non-superusers, omitting all the sbin directories, so, you might have to specify the full path of the daemon (e.g., /usr/sbin/nginx -V), or indeed just use sudo. – cnst Aug 26 '17 at 19:14
63

Diff-able one-liner:

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

Convenient for comparing two environments:

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

EDIT:

Thank you, Roman Newaza, for correctly pointing out that this includes --without module compile flags. I'm not using --without flags and was just focused on getting the module list, so I didn't catch that; the one-liner can be modified to help diff compile flags between 2 installations, like this:

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

which is the same as:

2>&1 nginx -V | xargs -n1

Maybe also pipe that through sort to normalize idiosyncratic ordering of compile flags and tr again to split assignments onto diff-able lines. Final result:

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

That works if sort behaves the same on both remote hosts (ie. they are both GNU or BSD). If you are comparing Linux to BSD (Mac OS X), just move the | sort | tr = '\n' piece out of lsmodn to the local shell where sort will be consistent:

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

Messier, but it works.

  • 2
    2>&1 nginx -V | tr -- - '\n' | grep _module command is totally wrong as it lists without-* options as installed! – Roman Newaza Mar 28 '13 at 9:07
  • awesome answer. out of interest why do you put 2>&1 in front. from what I've seen thats more unusual? – cavalcade Feb 18 '15 at 2:46
  • @MattTagg it's only in front until it's used. Then it's at the end of either command. – kmarsh Jun 29 '16 at 18:23
3
  • The nginx -V command (upper-case V) will list all the modules, as well as other compile-time options:

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

    Note that there is never any need for sudo for this command, as superuser powers would only be needed by nginx for opening ports below IPPORT_RESERVED (e.g., ports below 1024) and/or certain log-files for writing.

    However, depending on your $PATH settings, you may either need to specify the full path — e.g., /usr/sbin/nginx -V, or indeed use sudo for having the appropriate /sbin/ directory be included in the $PATH.

  • Starting with newer nginx releases — since nginx 1.9.11 (February 2016) — dynamically loadable modules are now supported, too — http://nginx.org/r/load_module — with the help of the load_module directive.

protected by HopelessN00b Feb 19 '15 at 1:18

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.