apache2: получить список зарегистрированных обработчиков

10

Возможно ли получить список всех обработчиков из apache? С setHandler можно создавать обработчики.

Одно из возможных применений - добавить обработчик для определенного расширения файла ( addHandler ). Знание всех возможных обработчиков и их идентификатора облегчит процесс их сопоставления с расширением файла (или в случае, если обработчики URL-адресов создают список возможных URL-адресов).

Обработчики должны управляться в ядре Apache в каком-то списке - как можно получить этот список?

MaoPU
источник

Ответы:

2

Apache не предоставляет список настроенных обработчиков. Не используя apachectl, ни с чем другим.

Лучший способ найти список сконфигурированных обработчиков, который я мог бы найти, - просто создать grep-папку конфигурации Apache, Handlerчтобы перехватить все AddHandlerи SetHandlerобъявления.

Для хостов на основе 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

Для хостов на базе 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

Обратите внимание, что не все найденные обработчики на самом деле зарегистрированы! Поиск в mods-enabled(Debian) и игнорирование строк, начиная с #сужения только зарегистрированных обработчиков.

Как предложила Дженни в комментариях, закомментированные строки можно удалить , отфильтровав вывод с помощью grep -Pv '^[^ ]*:\s*#'. Вот последняя команда для машин на основе Debian:

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

И для машин на базе Redhat:

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

В комментариях пользователь gogoud предоставляет дополнительный способ удалить закомментированные обработчики, возвращая, таким образом, только зарегистрированные обработчики:

// 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
источник
2
Чтобы избавиться от закомментированных обработчиков, используйте магию find и grep:find /etc/httpd/ -type f -exec grep -H -v '#' {} \; | grep Handler
Jenny D
@JennyD: я думаю, что после объявлений будут удалены строки с комментариями, например AddHandler cgi-script .cgi # Ben needs CGI.
dotancohen
1
Правда. Вы можете сделать это с egrepпомощью подходящего регулярного выражения, которое оставлено в качестве упражнения для читателя (поскольку, к сожалению, я должен сделать какую-то оплачиваемую работу прямо сейчас ...)
Дженни Д.
@JennyD: вызов принят! Я добавил grep фильтр для закомментированных строк. Приятно подумать, спасибо!
dotancohen
Почему внезапные падения? Этот ответ напрямую отвечает на вопрос и даже включает примеры двух наиболее распространенных вариантов Linux. Если бы ответ мог быть улучшен, я был бы признателен за конструктивную критику.
dotancohen
0

Это не совсем то, что вы хотите, но если вы включите server-infoобработчик в вашей конфигурации, вывод скажет вам, какие модули имеют обработчики, а какие нет, например:

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

Это было с Apache 2.2, поэтому, возможно, более поздние версии дадут вам более полезный вывод.

Flup
источник
Спасибо, однако я не вижу эту информацию. Эта страница показывает вывод server-info. Однако обратите внимание, что вывод представляет собой статическую страницу, скопированную с реального сервера и предоставленную вам через Raspberry Pi.
dotancohen