apache2: получить список зарегистрированных обработчиков
Возможно ли получить список всех обработчиков из apache? С setHandler можно создавать обработчики.
Одно из возможных применений - добавить обработчик для определенного расширения файла ( addHandler). Знание всех возможных обработчиков и их идентификатора облегчит процесс их сопоставления с расширением файла (или в случае, когда обработчики URL-адресов создают список возможных URL-адресов).
Обработчики должны управляться в ядре Apache в каком-то списке - как можно получить этот список?
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'
Это не совсем то, что вы хотите, но если вы включите server-info
обработчик в вашей конфигурации, вывод скажет вам, какие модули имеют обработчики, а какие нет, как это:
Module Name: mod_negotiation.c
Content handlers: yes
....
Module Name: mod_mime.c
Content handlers: none
....
Это было с Apache 2.2, поэтому, возможно, более поздние версии дадут вам более полезный вывод.