Apache игнорирует пользовательский модуль

Поэтому я работаю над созданием собственного модуля Apache. Прямо сейчас я пытаюсь заставить его возвращать 403, просто чтобы проверить его, но кажется, что apache просто полностью игнорирует модуль и возвращает страницу по умолчанию. Вот соответствующие части моего кода:

static int request_hook(request_rec* r){
  return HTTP_FORBIDDEN;
}

/* ********************************************
    Register module to Apache
   ******************************************** */

static void register_hooks(apr_pool_t *p)
{
    // We want to hook first so we can issue a deny ASAP if needed
    ap_hook_log_transaction( request_hook, NULL, NULL, APR_HOOK_REALLY_FIRST);
}

module AP_MODULE_DECLARE_DATA my_module = {
    STANDARD20_MODULE_STUFF,
    NULL,              /* dir config creater */
    NULL,                       /* dir merger --- default is to override */
    NULL,                       /* server config */
    NULL,                       /* merge server configs */
    NULL,                   /* command apr_table_t */
    register_hooks              /* register hooks */
};

И мой файл конфигурации apache выглядит так:

<VirtualHost *:80>
        DocumentRoot /var/www/html
        SetHandler      my_module
</VirtualHost>

Он был скомпилирован путем выполнения

sudo apxs -i -a -c my_module.c && sudo service apache2 restart

person Sam B    schedule 19.07.2017    source источник
comment
Вам нужно указать Apache загружать модуль на уровне экземпляра Apache, а не на уровне веб-сайта. В зависимости от вашей установки Apache у вас может быть файл loadmodules.conf со всеми модулями, которые должен загрузить Apache. В противном случае вы можете просто добавить в свой HTTPD.conf LoadModule имя_модуля /path/on/your/disk/to/moduel.so   -  person falconspy    schedule 19.07.2017
comment
У меня есть файл my_module.load в /etc/apache2/mods-enabled, и если я загружаю модуль вручную в конфигурации vhost, я вижу в журналах, что my_module уже загружен.   -  person Sam B    schedule 19.07.2017
comment
Что именно должен делать ваш модуль на 403-м запрещенном? Запрещенные вещи 403 являются частью ядра Apache, и все, что вы можете сделать, если я не ошибаюсь, это настроить страницу ошибки 403 в результате.   -  person falconspy    schedule 19.07.2017
comment
Моя цель - заставить apache возвращать запрещенный ответ 403, а не ответ HTTP 200 всякий раз, когда модуль включен.   -  person Sam B    schedule 19.07.2017
comment
Итак, вы фактически пытаетесь создать свой собственный модуль обслуживания? Если да, то эта страница, вероятно, является хорошим руководством о том, как это сделать без написания модуля shellhacks.com/redirect-site-maintenance-page-apache-htaccess   -  person falconspy    schedule 19.07.2017
comment
Нет. Я планирую добавить более подробную логику авторизации, но пока я хочу, чтобы она просто отклоняла всех в качестве проверки работоспособности.   -  person Sam B    schedule 20.07.2017


Ответы (1)


Исправлена. Проблема заключалась в функции:

ap_hook_log_transaction( request_hook, NULL, NULL, APR_HOOK_REALLY_FIRST);

должны были быть:

ap_hook_handler( request_hook, NULL, NULL, APR_HOOK_REALLY_FIRST);
person Sam B    schedule 20.07.2017