ฉันจะตรวจสอบได้อย่างไรว่ามีการเพิ่มโมดูลใดบ้างในการติดตั้ง nginx

answer

nginx -Vจะแสดงรายการโมดูลที่กำหนดค่าทั้งหมด ไม่มีคำสั่งเปิด/โหลดที่ชัดเจน

ซับเดียวแบบกระจายได้:

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แฟล็กและเพียงแค่มุ่งเน้นไปที่การรับรายการโมดูล ดังนั้นฉันจึงไม่เข้าใจ หนึ่งซับสามารถปรับเปลี่ยนเพื่อช่วยกระจายแฟล็กระหว่างการติดตั้ง 2 แบบนี้:

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')

เมสสิเยร์ แต่มันได้ผล

  • 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 จะใช้อำนาจ superuser ในการเปิดพอร์ตด้านล่างเท่านั้นIPPORT_RESERVED(เช่น พอร์ตที่ต่ำกว่า 1024)และ/หรือไฟล์บันทึกบางอย่างสำหรับการเขียน

    อย่างไรก็ตาม ขึ้นอยู่กับ$PATHการตั้งค่าของคุณ คุณอาจต้องระบุพาธแบบเต็ม เช่น/usr/sbin/nginx -Vหรือใช้sudoเพื่อให้มี/sbin/ไดเร็กทอรีที่เหมาะสมรวมอยู่ในไฟล์$PATH.

  • เริ่มต้นด้วยการเปิดตัว nginx ที่ใหม่กว่า - ตั้งแต่nginx 1.9.11(กุมภาพันธ์ 2559) - รองรับโมดูลที่โหลดได้แบบไดนามิกแล้วเช่นกัน - http://nginx.org/r/load_module - ด้วยความช่วยเหลือของload_moduleคำสั่ง

nginx -V ไม่แสดงโมดูลทั้งหมด มันแสดงประมาณ 20 โมดูลสำหรับฉัน

ฉันใช้strings /usr/sbin/nginx|grep _module|grep -v configure| sortซึ่งแสดงรายการโมดูลทั้งหมด 200+ ใน nginx ของฉัน

ฉันลองแล้วobjdumpแต่ดูเหมือนว่า nginx ในการติดตั้งของฉันถูกถอดไบนารีออก