apache2: obtenha uma lista de manipuladores registrados


10

É possível obter uma lista de todos os manipuladores do apache? Com 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 correspondê-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 apache core em algum tipo de lista - como é possível obter essa lista?

Respostas:


2

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

O melhor método que eu poderia encontrar para obter uma lista de manipuladores configurados é simplesmente grep a pasta de configuração do Apache para Handlerpegar todos AddHandlere SetHandlerdeclarações.

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

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

Conforme 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 usuário gogoud fornece uma maneira adicional de remover 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'

2
Para se livrar dos manipuladores comentado-out, use algum achado e magia grep:find /etc/httpd/ -type f -exec grep -H -v '#' {} \; | grep Handler
Jenny D

@ JennyD: Eu acho que isso removeria linhas com comentários após as declarações, como AddHandler cgi-script .cgi # Ben needs CGI.
dotancohen

1
Verdadeiro. Você poderia fazê-lo com egrepe uma expressão regular adequado, que é deixada como um exercício para o leitor (como infelizmente eu tenho que fazer algum trabalho pago agora ...)
Jenny D

@ JennyD: Desafio aceito! Adicionei um filtro grep para as linhas comentadas. Bom pensamento, obrigado!
dotancohen

Por que os repentinos votos negativos? Esta resposta responde diretamente à pergunta e até inclui exemplos para as duas variantes mais comuns do Linux. Se a resposta pudesse ser melhorada, eu apreciaria algumas críticas construtivas .
dotancohen

0

Isso não é exatamente o que você deseja, mas se você habilitar o server-infomanipulador na 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 ocorreu com o Apache 2.2, portanto, talvez as versões posteriores ofereçam uma saída mais útil.


Obrigado, no entanto, não estou vendo essa informação. Esta página mostra a saída de server-info. Observe, no entanto, que a saída é uma página estática copiada do servidor real e servida a você por meio de um Raspberry Pi.
dotancohen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.