Nginx가 컴파일 된 플래그를 어떻게 알 수 있습니까?


227

nginx 설치에 추가 된 모듈을 어떻게 확인할 수 있습니까?


7
이것을 말하는 또 다른 방법은 "Nginx가 컴파일 된 플래그를 어떻게 알 수 있습니까?"입니다. 검색 가능성을 높이기 위해 추가하고 싶었습니다.
Nathan Long

답변:


291

nginx -V구성된 모든 모듈을 나열합니다. 명시적인 enable / load 명령이 없습니다.


8
sudo nginx -V
멍청한 놈에

4
sudo우분투 14.04 에서 사용할 필요가 없습니다
Asfand Qazi

5
이 매개 변수는 대소 문자를 구분합니다. 소문자 "-v"를 사용하면 버전 번호 만 얻을 수 있습니다. 대문자 "-V"는 Nginx 바이너리 컴파일에 사용되는 모든 모듈 목록을 포함하여 완전한 구성을 제공합니다.
일리단

1
보인다 가 없을 수 있습니다 일부 시스템처럼 $PATH모두 생략 제대로 수퍼 유저가 아닌 사용자에 대한 설정을 sbin하면 (예를 들어, 데몬의 전체 경로를 지정해야 할 수도 있습니다, 디렉토리, 그래서 /usr/sbin/nginx -V), 또는 실제로 단지 사용 sudo.
cnst

@its_me ... 당신은 아마 실행 sudo 필요가 없습니다nginx -V
카슨 라인케

64

확산 가능한 원 라이너 :

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

두 환경을 비교하는 데 편리합니다.

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

편집하다:

Roman Newaza에게 --without모듈 컴파일 플래그가 포함되어 있음을 올바르게 지적 해 주셔서 감사합니다 . 나는 --without플래그를 사용 하지 않고 모듈 목록을 얻는 데 집중했기 때문에 그것을 잡지 못했습니다. one-liner는 다음과 같이 두 설치 사이에서 diff 컴파일 플래그를 돕기 위해 수정 될 수 있습니다.

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

이는 다음과 같습니다.

2>&1 nginx -V | xargs -n1

어쩌면 sort컴파일 플래그의 특유의 순서를 표준화하고 tr다시 할당 가능한 라인으로 할당을 분할 하기 위해 파이프를 통과 시킬 수도 있습니다. 최종 결과:

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

sort두 원격 호스트에서 모두 동일하게 작동하는 경우 (즉, 둘 다 GNU 또는 BSD 임) 작동합니다. Linux를 BSD (Mac OS X)와 비교하는 경우, | sort | tr = '\n'조각을 lsmodn로컬 쉘로 옮기면 sort됩니다.

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

메시 어지 만 작동합니다.


2
2>&1 nginx -V | tr -- - '\n' | grep _module명령이 설치되지 않은 * 옵션없이 나열되므로 완전히 잘못되었습니다!
Roman Newaza

멋진 답변입니다. 2> & 1을 앞에 두는 이유는 무엇입니까? 내가 본 것보다 더 특이한 점은 무엇입니까?
cavalcade

@MattTagg 사용되기 전까지 만 보입니다. 그런 다음 어느 명령의 끝에 있습니다.
kmarsh

3
  • nginx -V명령 (대문자 V)는 모든 모듈뿐만 아니라 다른 컴파일시 옵션을 나열합니다 :

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

    sudo수퍼 유저 권한은 nginx에 의해 아래 포트 IPPORT_RESERVED(예 : 1024 아래 포트) 및 / 또는 쓰기를위한 특정 로그 파일을 열기 위해서만 필요하므로이 명령 은 필요하지 않습니다 .

    그러나 사용자에 따라 $PATH설정, 당신은 전체 경로를 지정해야 할 수도 있습니다 중 - 예를 들어, /usr/sbin/nginx -V또는 실제로 사용하는 sudo적절한 필요에 대한 /sbin/에 포함 할 디렉토리를 $PATH.

  • 새로운 Nginx의 출시를 시작으로 - 이후 nginx 1.9.11(2 월 (2016)) - 동적으로로드 모듈이 지원됩니다 , 너무 - http://nginx.org/r/load_module을 -의 도움으로 load_module지시자.


1

nginx -V 모든 모듈을 표시하지는 않지만 약 20 개의 모듈이 표시됩니다.

내가 사용하는 strings /usr/sbin/nginx|grep _module|grep -v configure| sort내 nginx를 모든 200 개 + 모듈을 나열한다.

나는 또한 시도 objdump했지만 설치에서 nginx가 바이너리가 제거 된 것처럼 보입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.