Làm cách nào tôi có thể thấy cờ Nginx được biên dịch với?


227

Làm cách nào tôi có thể kiểm tra các mô-đun đã được thêm vào cài đặt nginx?


7
Một cách khác để nói điều này là "làm thế nào tôi có thể thấy những lá cờ Nginx được biên soạn với?" Chỉ muốn thêm rằng để tăng khả năng tìm kiếm.
Nathan Long

Câu trả lời:


291

nginx -Vsẽ liệt kê tất cả các mô-đun được cấu hình. Không có lệnh enable / load rõ ràng.


8
Lưu ý cho noobs: Nếu không đăng nhập với tư cách người dùng root, lệnh sẽ làsudo nginx -V
it_me

4
Tôi không cần sử dụng sudotrên Ubuntu 14.04
Asfand Qazi

5
Xin lưu ý rằng tham số này là trường hợp nhạy cảm. Nếu bạn sử dụng chữ thường "-v", bạn sẽ chỉ nhận được số phiên bản. Chữ hoa "-V" cung cấp cho bạn cấu hình hoàn chỉnh bao gồm danh sách tất cả các mô-đun được sử dụng để biên dịch nhị phân Nginx.
Illidan

1
Có vẻ như một số hệ thống có thể không được $PATHthiết lập đúng cho những người không phải là siêu nhân, bỏ qua tất cả các sbinthư mục, vì vậy, bạn có thể phải chỉ định đường dẫn đầy đủ của daemon (ví dụ /usr/sbin/nginx -V:) hoặc thực sự chỉ sử dụng sudo.
cnst

@its_me ... có lẽ bạn không cần chạy sudonginx -V
Carson Reinke

64

Diff-có thể một lớp lót:

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

Thuận tiện cho việc so sánh hai môi trường:

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

BIÊN TẬP:

Cảm ơn bạn, Roman Newaza, đã chỉ ra một cách chính xác rằng điều này bao gồm các --withoutcờ biên dịch mô-đun. Tôi không sử dụng --withoutcờ và chỉ tập trung vào việc lấy danh sách mô-đun, vì vậy tôi đã không nắm bắt được điều đó; một lớp lót có thể được sửa đổi để giúp các cờ biên dịch khác nhau giữa 2 lần cài đặt, như thế này:

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

tương tự như:

2>&1 nginx -V | xargs -n1

Cũng có thể dẫn sortđến việc bình thường hóa việc sắp xếp thứ tự các cờ biên dịch và trmột lần nữa để phân chia các bài tập thành các dòng khác nhau. Kết quả cuối cùng:

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

Điều đó hoạt động nếu sorthoạt động giống nhau trên cả hai máy chủ từ xa (tức là cả hai đều là GNU hoặc BSD). Nếu bạn đang so sánh Linux với BSD (Mac OS X), chỉ cần di chuyển | sort | tr = '\n'phần này ra khỏi lsmodntrình bao cục bộ, nơi sortsẽ nhất quán:

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

Messier, nhưng nó hoạt động.


2
2>&1 nginx -V | tr -- - '\n' | grep _modulelệnh hoàn toàn sai vì nó liệt kê mà không có * tùy chọn như đã cài đặt!
Roman Newaza

câu trả lời tuyệt vời. không quan tâm tại sao bạn đặt 2> & 1 ở phía trước. từ những gì tôi đã thấy đó là bất thường hơn?
kỵ binh

@MattTagg nó chỉ ở phía trước cho đến khi nó được sử dụng. Sau đó, nó ở cuối của một trong hai lệnh.
kmarsh

3
  • Các nginx -Vlệnh (chữ hoa V) sẽ liệt kê tất cả các mô-đun, cũng như tùy chọn thời gian biên dịch khác:

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

    Lưu ý rằng không bao giờ có bất kỳ nhu cầu sudocho lệnh này, như quyền hạn superuser sẽ chỉ là cần thiết bởi nginx để mở cổng bên dưới IPPORT_RESERVED(ví dụ, cổng sau 1024) và / hoặc một số log-file cho văn bản.

    Tuy nhiên, tùy thuộc vào $PATHcài đặt của bạn , bạn có thể cần chỉ định đường dẫn đầy đủ - ví dụ: /usr/sbin/nginx -Vhoặc thực sự sử dụng sudođể có /sbin/thư mục phù hợp được bao gồm trong $PATH.

  • Bắt đầu với các bản phát hành nginx mới hơn - kể từ nginx 1.9.11(tháng 2 năm 2016) - các mô-đun có thể tải động hiện cũng được hỗ trợ - http://nginx.org/r/load_module - với sự trợ giúp của load_modulechỉ thị.


1

nginx -V không hiển thị tất cả các mô-đun, nó hiển thị khoảng 20 mô-đun cho tôi.

Tôi sử dụng strings /usr/sbin/nginx|grep _module|grep -v configure| sorttrong đó liệt kê tất cả hơn 200 mô-đun trong nginx của tôi.

Tôi cũng đã thử objdumpnhưng có vẻ như nginx trong bản cài đặt của tôi đã bị tước nhị phân.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.