วิธีใดที่เหมาะสมที่สุดในการตรวจสอบว่าโมดูล apache ใดที่เปิดใช้งาน
วิธีใดที่เหมาะสมที่สุดในการตรวจสอบว่าโมดูล apache ใดที่เปิดใช้งาน
คำตอบ:
คุณอยู่บน Ubuntu ดังนั้นลอง:
apache2ctl -M
apache2: bad user name ${APACHE_RUN_USER}
sudo apache2ctl -M | sort
apache2ctl
แต่พวกเขามีการระบุไว้ในค่า manpage apache2ctl --help
หรือใน httpd
นั่นเป็นเพราะพวกเขาจะถูกส่งผ่านไปยัง พวกเขาอยู่ในเอกสาร httpdเท่านั้น
httpd -M
จะบอกคุณว่าโมดูลใดถูกติดตั้งหรือใช้งานร่วมกัน
httpd
ปฏิบัติการ
apache2
และไม่ใช่httpd
ซึ่งเป็นสาเหตุที่ไม่พบ
ไม่มีอะไรจากคำตอบข้างต้นใช้งานได้หากคุณไม่สามารถเรียกใช้คำสั่งบนเซิร์ฟเวอร์ระยะไกล หากคุณมีสิทธิ์“ ผู้ใช้” เท่านั้นหรือไม่มีเลยลองสร้างtest.php
สคริปต์:
<pre>
<?php
print_r(apache_get_modules());
?>
</pre>
แม้ว่ามันจะทำงานเฉพาะในกรณีที่มีการติดตั้ง PHP mod_php
เป็น
อาจจะช่วยให้บางคนในโฮสต์ที่ใช้ร่วมกันไม่สามารถเข้าถึงหรือดำเนินการตามขั้นตอนต่อไปhttpd
นี้apachectl
:
โมดูลที่เปิดใช้งาน: ls /etc/apache2/mods-enabled/
โมดูลที่มีอยู่: ls /etc/apache2/mods-available/
คุณยังสามารถใช้apachectl
apachectl -t -D DUMP_MODULES
ฉันคิดว่ามีคำถามสามข้อที่นี่จริง ฉันไม่แน่ใจว่าคุณถามอะไร
สิ่งนี้จะเป็น (โดยปกติ) ในไดเรกทอรีโมดูลของการแจกจ่าย apache ของคุณโดยปกติแล้ว / etc / httpd / modules /
สามารถตรวจสอบได้ด้วย / usr / sbin / httpd -M อย่างน้อยสำหรับ apache ระบบฐาน หากคุณต้องการตรวจสอบไฟล์ปรับแต่งเฉพาะ / usr / sbin / httpd -M -f / path / to / config / file
ในการรับข้อมูลจำนวนมากคุณสามารถดูได้ด้วยhttp: // machinename / server-info / นี่ไม่ใช่การกำหนดค่าตามค่าเริ่มต้นคุณต้องกำหนดค่าสิ่งต่อไปนี้มันรั่วเล็กน้อย ดังนั้นคนในพื้นที่เท่านั้นที่สามารถเห็นได้
หากคุณอยู่ในเครื่องและคุณมีสิทธิ์เป็นผู้ใช้ที่กำลังทำงานอยู่คุณสามารถดูสิ่งที่โหลดได้โดยตรวจสอบกระบวนการ คุณสามารถค้นหากระบวนการหลักด้วย:
ps -ef | gawk '/httpd/ && $3 == 1{print $2}'
จากนั้นตรวจสอบ
cat /proc/PID_FROM_ABOVE/maps
ถ้าคุณอยู่ใน Redhat / CentOS, ถูกนำมาใช้ในสถานที่ของhttpd
apache2ctl
ซึ่งหมายความว่าคุณต้องใช้
httpd -M
อย่างไรก็ตามhttpd
แทบไม่เคยอยู่ในเส้นทางที่คุณคาดหวัง
เราสามารถยืนยันได้บน CentOS 5.8 /usr/sbin/httpd
เส้นทางที่เกิดขึ้นจริง
/usr/sbin/httpd -M
แต่ถ้านั่นไม่ใช่เส้นทางคุณสามารถค้นพบมันได้ นี่คือวิธีที่ฉันสามารถทำได้
ก่อนอื่นฉันตรวจสอบ daemon ที่ใช้ในการควบคุม
less /init.d/httpd
รอบ ๆ เส้น 40ish
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/sbin/apachectl
httpd=${HTTPD-/usr/sbin/httpd}
prog=httpd
ซึ่งบอกฉันว่าจะหาได้ที่ไหน หวังว่านี่จะช่วยได้
แสดงรายการโมดูลที่เปิดใช้งานทั้งหมด
a2query -m
ใน gentoo ของฉันฉันสามารถดำเนินการapache2ctl modules
และดูโมดูลที่ระบุไว้
การตรวจสอบจากภายในสคริปต์ php (สำหรับ mod_xsendfile):
if (in_array(PHP_SAPI, array('apache','apache2filter','apache2handler'))
&& in_array('mod_xsendfile', apache_get_modules()))
\\doSomething();
การตรวจสอบ PHP_SAPI คือการแยกออกเมื่อ php ทำงานเป็น CGI เนื่องจากapache_get_modules ()ไม่ทำงานในบริบทนั้น นอกจากนี้หากสิ่งนี้ทำงานบน php <5.0.0 เฉพาะapache2handler
บริบทเท่านั้นที่จะสร้างผลลัพธ์ที่คาดหวัง
ฉันสร้างสคริปต์หลามขนาดเล็กเพื่อช่วยคุณ โปรดดูที่https://github.com/zioalex/unused_apache_modules
นี่คือสิ่งที่คุณคาดหวังได้:
curl http://localhost/server-info > http_modules_test.txt
cat http_modules_test.txt| python find_unused_apache_mod.py
1
Module name mod_python.c
Configuration Phase Participation: 4
Request Phase Participation: 11
Current Configuration: 3
2
Module name mod_version.c
Configuration Phase Participation: 0
Request Phase Participation: 0
Current Configuration: 1
3
Module name mod_proxy_connect.c
Configuration Phase Participation: 0
Request Phase Participation: 0
Current Configuration: 0
To remove safely:
['mod_proxy_connect.c']
POPPED: mod_proxy_connect.c
To KEEP: ['mod_python.c', 'mod_version.c', 'mod_proxy_connect.c']