apache2: Dapatkan daftar penangan terdaftar


10

Apakah mungkin, untuk mendapatkan daftar semua penangan dari apache? Dengan setHandler dimungkinkan untuk membuat penangan.

Salah satu kemungkinan penggunaan adalah menambahkan penangan untuk ekstensi file tertentu ( addHandler ). Mengetahui semua penangan yang mungkin dan pengidentifikasi mereka akan memudahkan proses pencocokan mereka dengan ekstensi file (atau jika penangan URL membuat daftar URL yang mungkin).

Penangan harus dikelola dalam inti apache dalam beberapa jenis daftar - bagaimana mungkin mengeluarkan daftar ini?

Jawaban:


2

Apache tidak mengekspos daftar penangan yang dikonfigurasi. Tidak menggunakan apachectl, tidak dengan apa pun.

Metode terbaik yang bisa saya temukan untuk mendapatkan daftar penangan yang dikonfigurasi adalah dengan hanya mengambil folder konfigurasi Apache untuk Handlermenangkap semua AddHandlerdan SetHandlerdeklarasi.

Untuk host berbasis 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

Untuk host berbasis Redhat (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

Perhatikan bahwa tidak semua penangan yang ditemukan sebenarnya terdaftar! Cari di mods-enabled(Debian) dan abaikan garis mulai dengan #mempersempit hanya penangan terdaftar.

Seperti yang disarankan oleh Jenny di komentar, baris komentar dapat dihapus dengan memfilter output dengan grep -Pv '^[^ ]*:\s*#'. Ini adalah perintah terakhir untuk mesin berbasis Debian:

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

Dan untuk mesin berbasis Redhat:

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

Dalam komentar, pengguna gogoud memberikan cara tambahan untuk menghapus penangan yang berkomentar, sehingga hanya mengembalikan penangan yang terdaftar:

// 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
Untuk menyingkirkan penangan yang dikomentari, gunakan beberapa find and grep magic:find /etc/httpd/ -type f -exec grep -H -v '#' {} \; | grep Handler
Jenny D

@ JennyD: Saya pikir itu akan menghapus baris dengan komentar setelah deklarasi, seperti AddHandler cgi-script .cgi # Ben needs CGI.
dotancohen

1
Benar. Anda dapat melakukannya dengan egrepdan regexp yang sesuai, yang dibiarkan sebagai latihan untuk pembaca (karena sayangnya saya harus melakukan beberapa pekerjaan berbayar sekarang ...)
Jenny D

@ JennyD: Tantangan diterima! Saya telah menambahkan filter grep untuk baris komentar. Pemikiran yang bagus, terima kasih!
dotancohen

Kenapa tiba-tiba downvotes? Jawaban ini langsung menjawab pertanyaan dan bahkan termasuk contoh untuk dua varian Linux yang paling umum. Jika jawabannya dapat ditingkatkan, saya akan menghargai kritik yang membangun .
dotancohen

0

Ini bukan yang Anda inginkan, tetapi jika Anda mengaktifkan server-infopenangan di konfigurasi Anda, hasilnya akan memberi tahu Anda modul mana yang memiliki penangan dan yang tidak, seperti ini:

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

Ini dengan Apache 2.2, jadi mungkin versi yang lebih baru akan memberi Anda hasil yang lebih bermanfaat.


Terima kasih, namun saya tidak melihat info itu. Halaman ini menunjukkan output dari server-info. Perhatikan, bagaimanapun, bahwa output adalah halaman statis yang disalin dari server nyata dan disajikan kepada Anda melalui Raspberry Pi.
dotancohen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.