apache2: Отримайте список зареєстрованих обробників


10

Чи можливо отримати список всіх обробників від apache? За допомогою setHandler можна створити обробники.

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

Обробниками необхідно керувати в ядрі apache в якомусь списку - як можна вивести цей список?

Відповіді:


2

Apache не виставляє список налаштованих обробників. Не користуючись apachectl, ні з чим іншим.

Найкращий спосіб, який я міг би знайти для списку налаштованих обробників, - це просто перев’язати папку конфігурації 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'

2
Щоб позбутися від коментованих обробників, скористайтеся магією знахідки та грепування: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, тому, можливо, пізніші версії дадуть вам більше корисного результату.


Дякую, проте я не бачу цієї інформації. На цій сторінці показано вихідні дані server-info. Однак зауважте, що вихід - це статична сторінка, скопійована з реального сервера та подана вам через Raspberry Pi.
dotancohen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.