Bagaimana saya bisa melihat bendera mana yang dikompilasi dengan Nginx?

227

Bagaimana saya bisa memeriksa modul apa yang telah ditambahkan ke instalasi nginx?

Nisanio
sumber
7
Cara lain untuk mengatakan ini adalah "bagaimana saya bisa melihat bendera mana yang dikompilasi dengan Nginx?" Hanya ingin menambahkan itu untuk meningkatkan pencarian.
Nathan Long

Jawaban:

291

nginx -Vakan mendaftar semua modul yang dikonfigurasi. Tidak ada perintah aktifkan / muat eksplisit.

Joris
sumber
8
Catatan untuk noobs: Jika tidak masuk sebagai pengguna root, perintahnya adalahsudo nginx -V
its_me
4
Saya tidak perlu menggunakan sudoUbuntu 14.04
Asfand Qazi
5
Harap dicatat bahwa parameter ini peka huruf besar-kecil. Jika Anda menggunakan huruf kecil "-v" Anda hanya akan mendapatkan nomor versi. Huruf besar "-V" memberi Anda konfigurasi lengkap termasuk daftar semua modul yang digunakan untuk kompilasi biner Nginx.
Illidan
1
Sepertinya beberapa sistem mungkin tidak memiliki $PATHset yang benar untuk non-pengguna super, menghilangkan semua sbindirektori, jadi, Anda mungkin harus menentukan path lengkap daemon (misalnya, /usr/sbin/nginx -V), atau memang hanya menggunakan sudo.
cnst
@its_me ... Anda mungkin tidak perlu sudo untuk menjalankannginx -V
Carson Reinke
64

Diff -able one-liner:

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

Nyaman untuk membandingkan dua lingkungan:

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

SUNTING:

Terima kasih, Roman Newaza, untuk menunjukkan dengan benar bahwa ini termasuk --withoutflag kompilasi modul. Saya tidak menggunakan --withoutflag dan hanya fokus untuk mendapatkan daftar modul, jadi saya tidak menangkapnya; one-liner dapat dimodifikasi untuk membantu mengompilasi flag berbeda antara 2 instalasi, seperti ini:

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

yang sama dengan:

2>&1 nginx -V | xargs -n1

Mungkin juga mem-pipe yang melalui sortuntuk menormalkan urutan istimewa dari flag kompilasi dan trlagi untuk membagi tugas ke baris yang berbeda. Hasil akhir:

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

Itu berfungsi jika sortberperilaku sama pada kedua host jarak jauh (mis. Keduanya GNU atau BSD). Jika Anda membandingkan Linux dengan BSD (Mac OS X), cukup pindahkan | sort | tr = '\n'bagian lsmodnke shell lokal yang sortkonsisten:

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

Messier, tetapi berhasil.

al-x
sumber
2
2>&1 nginx -V | tr -- - '\n' | grep _modulePerintah ini benar-benar salah karena daftar tanpa opsi * diinstal!
Roman Newaza
jawaban yang luar biasa. Karena ketertarikan, mengapa Anda menempatkan 2> & 1 di depan. dari apa yang saya lihat itu lebih tidak biasa?
iring
@MattTagg hanya di depan sampai digunakan. Maka itu di akhir dari salah satu perintah.
kmarsh
3
  • The nginx -Vperintah (-huruf V) akan daftar semua modul, serta pilihan saat kompilasi lainnya:

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

    Perhatikan bahwa tidak pernah ada kebutuhan untuk sudoperintah ini, karena kekuatan superuser hanya diperlukan oleh nginx untuk membuka porta di bawah ini IPPORT_RESERVED(mis. Porta di bawah 1024) dan / atau file log tertentu untuk menulis.

    Namun, tergantung pada $PATHpengaturan Anda, Anda mungkin perlu menentukan path lengkap - misalnya /usr/sbin/nginx -V,, atau memang digunakan sudountuk memiliki /sbin/direktori yang sesuai dimasukkan dalam $PATH.

  • Dimulai dengan rilis nginx yang lebih baru - sejak nginx 1.9.11(Februari 2016) - modul yang dapat dimuat secara dinamis sekarang juga didukung - http://nginx.org/r/load_module - dengan bantuan load_modulearahan.

cnst
sumber
1

nginx -V tidak menunjukkan semua modul, itu menunjukkan sekitar 20 modul untuk saya.

Saya menggunakan strings /usr/sbin/nginx|grep _module|grep -v configure| sortyang mencantumkan semua 200+ modul di nginx saya.

Saya juga mencoba objdumptetapi sepertinya nginx dalam instalasi saya telah biner dilucuti.

imel96
sumber