apache2: Ruft eine Liste der registrierten Handler ab

10

Ist es möglich, eine Liste aller Handler von Apache zu erhalten? Mit setHandler können Handler erstellt werden.

Eine mögliche Verwendung wäre das Hinzufügen eines Handlers für eine bestimmte Dateierweiterung ( addHandler ). Wenn Sie alle möglichen Handler und ihre Kennung kennen, können Sie sie leichter einer Dateierweiterung zuordnen (oder wenn URL-Handler eine Liste möglicher URLs erstellen).

Die Handler müssen im Apache-Kern in einer Art Liste verwaltet werden - wie ist es möglich, diese Liste herauszuholen?

MaoPU
quelle

Antworten:

2

Apache macht keine Liste der konfigurierten Handler verfügbar. Nicht benutzen apachectl, nicht mit irgendetwas anderem.

Die beste Methode, um eine Liste der konfigurierten Handler zu erhalten, besteht darin, einfach den Apache-Konfigurationsordner zu durchsuchen Handler, um alle AddHandlerund SetHandlerDeklarationen abzufangen.

Für Debian-basierte (Ubuntu) Hosts

$ 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

Für Redhat-basierte Hosts (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

Beachten Sie, dass nicht alle gefundenen Handler tatsächlich registriert sind! Suchen Sie in mods-enabled(Debian) und ignorieren Sie Zeilen, die damit beginnen #, nur die registrierten Handler einzugrenzen.

Wie von Jenny in den Kommentaren vorgeschlagen, können kommentierte Zeilen durch Filtern der Ausgabe mit entfernt werden grep -Pv '^[^ ]*:\s*#'. Hier ist der letzte Befehl für Debian-basierte Maschinen:

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

Und für Redhat-basierte Maschinen:

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

In den Kommentaren bietet Benutzer gogoud eine zusätzliche Möglichkeit, kommentierte Handler zu entfernen und somit nur registrierte Handler zurückzugeben:

// 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
quelle
2
Verwenden Sie etwas Find and Grep-Magie, um die auskommentierten Handler loszuwerden:find /etc/httpd/ -type f -exec grep -H -v '#' {} \; | grep Handler
Jenny D
@ JennyD: Ich denke, das würde Zeilen mit Kommentaren nach den Erklärungen entfernen, wie z AddHandler cgi-script .cgi # Ben needs CGI.
Dotancohen
1
Wahr. Sie könnten es mit egrepund einem geeigneten regulären Ausdruck tun, der als Übung für den Leser übrig bleibt (da ich leider gerade etwas bezahlte Arbeit machen muss ...)
Jenny D
@ JennyD: Herausforderung angenommen! Ich habe einen Grep-Filter für kommentierte Zeilen hinzugefügt. Nettes Denken, danke!
Dotancohen
Warum die plötzlichen Abstimmungen? Diese Antwort beantwortet die Frage direkt und enthält sogar Beispiele für die beiden häufigsten Linux-Varianten. Wenn die Antwort verbessert werden könnte, würde ich mich über konstruktive Kritik freuen.
Dotancohen
0

Dies ist nicht ganz das, was Sie wollen, aber wenn Sie den server-infoHandler in Ihrer Konfiguration aktivieren , zeigt Ihnen die Ausgabe, welche Module Handler haben und welche nicht, wie folgt:

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

Dies war mit Apache 2.2 möglich, sodass Sie in späteren Versionen möglicherweise eine nützlichere Ausgabe erhalten.

Flup
quelle
Vielen Dank, aber ich sehe diese Informationen nicht. Diese Seite zeigt die Ausgabe von server-info. Beachten Sie jedoch, dass die Ausgabe eine statische Seite ist, die vom realen Server kopiert und Ihnen über einen Raspberry Pi bereitgestellt wird.
Dotancohen