ฉันจะตรวจสอบโมดูลที่เพิ่มเข้าในการติดตั้ง nginx ได้อย่างไร?
ฉันจะตรวจสอบโมดูลที่เพิ่มเข้าในการติดตั้ง nginx ได้อย่างไร?
คำตอบ:
nginx -Vจะแสดงรายการโมดูลที่กำหนดค่าทั้งหมด ไม่มีคำสั่งเปิดใช้งาน / โหลดอย่างชัดเจน
sudo nginx -V
                    sudoบน Ubuntu 14.04
                    $PATHตั้งค่าอย่างถูกต้องสำหรับผู้ที่ไม่ใช่ superusers-ถนัดทั้งหมดsbinไดเรกทอรีดังนั้นคุณอาจต้องระบุเส้นทางแบบเต็มของภูต (เช่น/usr/sbin/nginx -V) sudoจริงหรือเพียงแค่ใช้
                    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')
เมสไซเออร์ แต่มันใช้งานได้
2>&1 nginx -V | tr -- - '\n' | grep _moduleคำสั่งนั้นผิดทั้งหมดเนื่องจากไม่มีรายการตัวเลือก * ตามที่ติดตั้ง!
                    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คำสั่งนี้เนื่องจากพลังของ superuser จะต้องใช้โดย nginx สำหรับการเปิดพอร์ตด้านล่าง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 ในการติดตั้งของฉันมีการถอดไบนารี