apache2: Obtenha uma lista de manipuladores registrados

10

É possível obter uma lista de todos os manipuladores do apache? Com o setHandler , é possível criar manipuladores.

Um uso possível seria adicionar um manipulador para uma extensão de arquivo específica ( addHandler ). Conhecer todos os manipuladores possíveis e seu identificador facilitaria o processo de combiná-los a uma extensão de arquivo (ou no caso de manipuladores de URL criarem uma lista de possíveis URLs).

Os manipuladores devem ser gerenciados no núcleo do apache em algum tipo de lista - como é possível obter essa lista?

    
por MaoPU 16.09.2010 / 06:46

2 respostas

1

O Apache não expõe uma lista de manipuladores configurados. Não está usando apachectl , nem com mais nada.

O melhor método que consegui encontrar para obter uma lista de manipuladores configurados é simplesmente fazer com que a pasta de configuração do Apache para Handler capture todas as declarações AddHandler e SetHandler . p>

Para hosts baseados no 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

Para hosts baseados em 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

Note que nem todos os manipuladores encontrados estão de fato registrados! Pesquise em mods-enabled (Debian) e desconsidere as linhas que começam com # para restringir somente os manipuladores registrados.

Como sugerido por Jenny nos comentários, as linhas comentadas podem ser removidas filtrando a saída com grep -Pv '^[^ ]*:\s*#' . Aqui está o comando final para máquinas baseadas no Debian:

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

E para máquinas baseadas em Redhat:

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

Nos comentários, o gogoud oferece uma maneira adicional de remover os manipuladores comentados, retornando apenas os manipuladores registrados:

// 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'
    
por 04.04.2014 / 13:17
0

Isso não é exatamente o que você quer, mas se você ativar o manipulador server-info em sua configuração, a saída dirá quais módulos têm manipuladores e quais não, assim:

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

Isso foi com o Apache 2.2, então talvez versões posteriores lhe darão uma saída mais útil.

    
por 28.03.2014 / 09:30