apache2: Uzyskaj listę zarejestrowanych programów obsługi

10

Czy to możliwe, aby uzyskać listę wszystkich programów obsługi z apache? Za pomocą setHandler można tworzyć moduły obsługi.

Jednym z możliwych zastosowań byłoby dodanie modułu obsługi dla określonego rozszerzenia pliku ( addHandler ). Znajomość wszystkich możliwych programów obsługi i ich identyfikatora ułatwi proces dopasowywania ich do rozszerzenia pliku (lub w przypadku programów obsługi adresów URL tworzących listę możliwych adresów URL).

Procedurami obsługi należy zarządzać w rdzeniu Apache na jakiejś liście - jak można uzyskać tę listę?

MaoPU
źródło

Odpowiedzi:

2

Apache nie wyświetla listy skonfigurowanych programów obsługi. Nie używam apachectl, nie z niczym innym.

Najlepszą metodą, jaką udało mi się uzyskać, aby uzyskać listę skonfigurowanych programów obsługi, jest po prostu grepowanie folderu konfiguracyjnego Apache w Handlercelu przechwycenia wszystkich AddHandleri SetHandlerdeklaracji.

Dla hostów opartych na Debianie (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

Dla hostów opartych na 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

Pamiętaj, że nie wszystkie znalezione programy obsługi są w rzeczywistości zarejestrowane! Szukaj w mods-enabled(Debian) i ignoruj ​​wiersze zaczynające się od, #aby zawęzić tylko zarejestrowanych handlerów.

Jak sugeruje Jenny w komentarzach, skomentowane linie można usunąć , filtrując dane wyjściowe za pomocą grep -Pv '^[^ ]*:\s*#'. Oto ostatnie polecenie dla maszyn opartych na Debianie:

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

A dla maszyn opartych na Redhat:

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

W komentarzach użytkownik gogoud zapewnia dodatkowy sposób na usunięcie komentowanych programów obsługi, zwracając w ten sposób tylko zarejestrowanych programów obsługi:

// 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'
dotancohen
źródło
2
Aby pozbyć się skomentowanych przewodników, użyj magii find i grep:find /etc/httpd/ -type f -exec grep -H -v '#' {} \; | grep Handler
Jenny D
@JennyD: Myślę, że to usunęłoby wiersze z komentarzami po deklaracjach, takich jak AddHandler cgi-script .cgi # Ben needs CGI.
dotancohen
1
Prawdziwe. Można to zrobić za egreppomocą odpowiedniego wyrażenia regularnego, które pozostawia się jako ćwiczenie dla czytelnika (ponieważ niestety muszę teraz wykonać płatną pracę ...)
Jenny D
@JennyD: Wyzwanie przyjęte! Dodałem filtr grep dla komentowanych linii. Fajne myślenie, dzięki!
dotancohen 17.04.15
Dlaczego nagłe przegłosowania? Ta odpowiedź bezpośrednio odpowiada na pytanie, a nawet zawiera przykłady dwóch najpopularniejszych wariantów systemu Linux. Gdyby można było poprawić odpowiedź, doceniłbym konstruktywną krytykę.
dotancohen
0

Nie jest to dokładnie to, czego chcesz, ale jeśli włączysz server-infomoduł obsługi w konfiguracji, dane wyjściowe powiedzą, które moduły mają moduły obsługi, a które nie:

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

Tak było z Apache 2.2, więc być może późniejsze wersje dadzą bardziej przydatne wyjście.

Flup
źródło
Dziękuję, ale nie widzę tych informacji. Ta strona pokazuje wyniki server-info. Zauważ jednak, że wyjście to statyczna strona skopiowana z prawdziwego serwera i dostarczona do ciebie przez Raspberry Pi.
dotancohen