apache2: รับรายการตัวจัดการที่ลงทะเบียน


10

เป็นไปได้ไหมที่จะรับรายชื่อตัวจัดการทั้งหมดจาก apache? ด้วยsetHandlerมันเป็นไปได้ที่จะสร้างตัวจัดการ

การใช้งานที่เป็นไปได้หนึ่งอย่างคือการเพิ่มตัวจัดการสำหรับนามสกุลไฟล์เฉพาะ ( addHandler ) การรู้จักตัวจัดการที่เป็นไปได้ทั้งหมดและตัวระบุของพวกเขาจะทำให้กระบวนการจับคู่พวกเขากับนามสกุลไฟล์ (หรือในกรณีที่ตัวจัดการ URL สร้างรายการ URL ที่เป็นไปได้)

ตัวจัดการต้องถูกจัดการใน apache core ในรายการบางประเภท - เป็นไปได้อย่างไรที่จะนำรายการนี้ออก?

คำตอบ:


2

Apache ไม่เปิดเผยรายการตัวจัดการที่ตั้งค่าไว้ ไม่ได้ใช้apachectlไม่ใช่กับสิ่งอื่น

วิธีที่ดีที่สุดที่ฉันจะได้รับรายชื่อของตัวจัดการการกำหนดค่าคือการ grep โฟลเดอร์การตั้งค่า Apache สำหรับHandlerการจับทั้งหมดAddHandlerและSetHandlerการประกาศ

สำหรับโฮสต์ Debian (Ubuntu)

$ grep -ir "Handler" /etc/apache2/*
mods-enabled/php5.conf: SetHandler application/x-httpd-php
mods-enabled/php5.conf: SetHandler application/x-httpd-php-source
apache2.conf:           SetHandler server-status
mods-available/info.conf:    SetHandler server-info
mods-available/ldap.conf:    SetHandler ldap-status
mods-available/status.conf:  SetHandler server-status
mods-available/php5.conf:    SetHandler application/x-httpd-php
mods-available/php5.conf:    SetHandler application/x-httpd-php-source
sites-available/default:     AddHandler cgi-script .cgi
sites-enabled/000-default:   AddHandler cgi-script .cgi

สำหรับโฮสต์ Redhat-based (Fedora, CentOS)

$ grep -ir "Handler" /etc/httpd/*
conf.d/php.conf:  AddHandler php5-script .php
conf/httpd.conf:  #AddHandler cgi-script .cgi
conf/httpd.conf:  #AddHandler send-as-is asis
conf/httpd.conf:  AddHandler type-map var
conf/httpd.conf:  #ErrorDocument 404 "/cgi-bin/missing_handler.pl"
conf/httpd.conf:     AddHandler type-map var
conf/httpd.conf:#    SetHandler server-status
conf/httpd.conf:#    SetHandler server-info
conf.d/fcgid.conf:   AddHandler fcgid-script fcg fcgi fpl
conf.d/perl.conf:#   SetHandler perl-script
conf.d/perl.conf:#   SetHandler perl-script

โปรดทราบว่าในความเป็นจริงแล้วตัวจัดการไม่พบทั้งหมดที่ลงทะเบียน! ค้นหาในmods-enabled(Debian) และไม่สนใจบรรทัดที่ขึ้นต้นด้วย#แคบลงเฉพาะตัวจัดการที่ลงทะเบียน

ที่แนะนำโดยเจนนี่ในความคิดเห็นที่สายการแสดงความคิดเห็นสามารถลบออกได้grep -Pv '^[^ ]*:\s*#'โดยการกรองเอาท์พุทที่มี นี่คือคำสั่งสุดท้ายสำหรับเครื่องที่ใช้ Debian:

$ grep -ir "Handler" /etc/apache2/* | grep -Pv '^[^ ]*:\s*#'

และสำหรับเครื่องจักรที่ใช้ Redhat:

$ grep -ir "Handler" /etc/httpd/* | grep -Pv '^[^ ]*:\s*#'

ในความคิดเห็นของผู้ใช้gogoudให้วิธีการเพิ่มเติมในการแยกตัวจัดการความคิดเห็นดังนั้นจึงส่งกลับตัวจัดการที่ลงทะเบียนเท่านั้น:

// Debian or Ubuntu
$ grep -R "Handler" /etc/apache2/*enabled* | sed 's/#.*//;/^[^:]*:\s*$/d'

// Redhat, CentoOS, Fedora
$ grep -R "Handler" /etc/httpd/*enabled* | sed 's/#.*//;/^[^:]*:\s*$/d'

2
ในการกำจัดตัวจัดการคอมเม้นท์ให้ใช้ find find และ grep magic:find /etc/httpd/ -type f -exec grep -H -v '#' {} \; | grep Handler
Jenny D

@JennyD: AddHandler cgi-script .cgi # Ben needs CGIผมคิดว่าจะเอาเส้นที่มีความเห็นหลังจากการประกาศเช่น
dotancohen

1
จริง คุณสามารถทำได้ด้วยegrepและ regexp ที่เหมาะสมซึ่งถูกทิ้งไว้เป็นแบบฝึกหัดสำหรับผู้อ่าน (น่าเสียดายที่ฉันต้องทำงานบางอย่างที่ได้รับค่าจ้างตอนนี้ ... )
Jenny D

@JennyD: ยอมรับความท้าทายแล้ว! ฉันได้เพิ่มตัวกรอง grep สำหรับบรรทัดที่มีความคิดเห็น คิดดีขอบคุณ!
dotancohen

ทำไม downvotes อย่างฉับพลัน? คำตอบนี้ตอบคำถามโดยตรงและยังมีตัวอย่างสำหรับตัวแปร Linux ที่พบมากที่สุดสองตัว หากคำตอบนั้นดีขึ้นฉันจะขอบคุณคำวิจารณ์ที่สร้างสรรค์
dotancohen

0

นี่ไม่ใช่สิ่งที่คุณต้องการ แต่ถ้าคุณเปิดใช้งานserver-infoตัวจัดการในการกำหนดค่าของคุณเอาต์พุตจะบอกคุณว่าโมดูลใดมีตัวจัดการและสิ่งที่ไม่ต้องการ:

Module Name: mod_negotiation.c
Content handlers: yes
....
Module Name: mod_mime.c
Content handlers: none
....

นี่คือกับ Apache 2.2 ดังนั้นบางทีรุ่นที่ใหม่กว่าจะให้ผลลัพธ์ที่มีประโยชน์มากขึ้น


ขอบคุณอย่างไรก็ตามฉันไม่เห็นข้อมูลนั้น หน้านี้server-infoแสดงให้เห็นว่าการส่งออกของ อย่างไรก็ตามโปรดทราบว่าผลลัพธ์นั้นเป็นหน้าสแตติกที่คัดลอกมาจากเซิร์ฟเวอร์จริงและให้บริการแก่คุณผ่าน Raspberry Pi
dotancohen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.