Структуры данных Apache. server_rec


В предыдущей статье мы рассмотрели структуру request_rec - важнейшую структуру сервера Apache, предназначеную для хранения всех данных поступившего запроса. Одним из полей request_rec было поле server_rec *server, которое содержит структуру сервера, на который поступил запрос. Сегодня эту структуру мы и рассмотрим. В основном она доступна через указатель на request_rec (r->server), но иногда передается непосредственно, например, в обработчик хука post_config - post_config_handler(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s).

Данная статья взята из выпуска №5 рассылки "Информационный бюллетень от ApacheDev.ru". Подписаться на рассылку…

struct server_rec {
process_rec *process;
server_rec *next;
const char *defn_name;
unsigned defn_line_number;
char *server_admin;
char *server_hostname;
apr_port_t port;
char *error_fname;
apr_file_t *error_log;
int loglevel;
int is_virtual;
struct ap_conf_vector_t *module_config;
struct ap_conf_vector_t *lookup_defaults;
server_addr_rec *addrs;
apr_interval_time_t timeout;
apr_interval_time_t keep_alive_timeout;
int keep_alive_max;
int keep_alive;
const char *path;
int pathlen;
apr_array_header_t *names;
apr_array_header_t *wild_names;
int limit_req_line;
int limit_req_fieldsize;
int limit_req_fields;
};
process_rec *process; Структура, описывающая процесс, в контесте которого выполняется данный сервер. Структура process_rec имеет следующие поля:
struct process_rec {
/* Глобальный пул. Очищается при завершении процесса*/
apr_pool_t *pool;
/* Пул конфигурации. Очищается при перезагрузки сервера*/
apr_pool_t *pconf;
/* Количество аргументов коммандной строки, переданных программе */
int argc;
/* Строка аргументов */
const char * const *argv;
/* Имя программы, использованное для запуска */
const char *short_name;
};
server_rec *next; Указатель на структуру следующего сервера.
const char *defn_name; Полное имя используемого файла конфигурации. (Хотя в документации это поле описано как хранилище для имени сервера).
unsigned defn_line_number; Номер строки в конфигурационном файле где задается данный сервер.
char *server_admin; E-mail администратора сервера. Значение директивы ServerAdmin.
char *server_hostname; Имя сервера. Значение директивы ServerName.
apr_port_t port; Порт сервера.
char *error_fname; Полное имя используемого лога ошибок. Определяется директивой ErrorLog.
apr_file_t *error_log; Файловый дескриптор лога ошибок.
int loglevel; Уровень ошибок этого сервера, попадающих в лог. Возможные значения:
  • APLOG_EMERG
  • APLOG_ALERT
  • APLOG_CRIT
  • APLOG_ERR
  • APLOG_WARNING
  • APLOG_NOTICE
  • APLOG_INFO
  • APLOG_DEBUG
Подробнее об уровнях ошибках и о механизме логов в Apache можно прочитать в статье "Настройка логов в Apache".
int is_virtual; Данный флаг показывает является ли данный сервер виртуальным.
struct ap_conf_vector_t *module_config; Вектор серверных конфигураций. Содержит указатели на серверные конфигурации модулей. Для получения конфигурации конкретного модуля используйте функцию ap_get_module_config(r->server->module_config, &your_module_struct). Подробнее о конфигурации Apache можно прочитать в статье "Взаимодействие модулей Apache с файлами конфигурации (httpd.conf и .htaccess)".
struct ap_conf_vector_t *lookup_defaults; Вектор дефолтовых значений директив контекста каталога до обхода секций <Directory>, <Files> и <Location>.
server_addr_rec *addrs; Структура, описывающая адрес сервера:
struct server_addr_rec {
/* Указатель на следующий сервер */
server_addr_rec *next;
/* Адрес сервера */
apr_sockaddr_t *host_addr;
/* Порт сервера */
apr_port_t host_port;
/* Имя сервера, определенное в "<VirtualHost>" */
char *virthost;
};
apr_interval_time_t timeout; Таймаут в микросекундах. Значение директивы Timeout.
apr_interval_time_t keep_alive_timeout; Значение директивы KeepAliveTimeout. Задается в микросекундах.
int keep_alive_max; Максимальное количество запросов на соединение. Значение директивы MaxKeepAliveRequests.
int keep_alive; Использовать устойчивые соединения? Значение директивы KeepAlive.
const char *path; Значение директивы ServerPath для этого сервера.
int pathlen; Длина значения поля path.
apr_array_header_t *names; Массив значений директив ServerAlias. Для чтения значений используйте следующий код:
apr_array_header_t *array = server->names;
for (i = 0; i < array->nelts; ++i){
const char *aray_item = ((const char **) array->elts)[i];
}
apr_array_header_t *wild_names; Массив значений директив ServerAlias, содержащих символ "*".
int limit_req_line; Лимит длины строки запроса HTTP.
int limit_req_fieldsize; Лимит длины HTTP заголовка.
int limit_req_fields; Лимит количества заголовков в запросе.

Ссылки

  • Книга "Администрирование Apache" (Глава 12). Хорошее описание основных структур и API сервера. Озон, Болеро.

Опубликовано в: Архитектура Июнь 21, 2006

14 Комментариев »

  1. отлично

    Комментарий от я — Ноябрь 8, 2006 @ 8:45 am

  2. Всё написано очень грамотно. Очень полезно

    Комментарий от pavel — Июль 17, 2008 @ 1:55 pm

  3. Очень классно написано!! РЕСПЕКТ АВТОРУ!!!
    _____________
    mameipape.ru

    Комментарий от андрюха — Август 29, 2008 @ 12:10 am

  4. ololo

    Комментарий от Богдан — Октябрь 18, 2008 @ 5:32 pm

  5. ahaha

    Комментарий от Иван — Октябрь 18, 2008 @ 5:34 pm

  6. yeah, me 2

    Комментарий от Юлия — Октябрь 18, 2008 @ 5:35 pm

  7. Классно!

    Комментарий от Гаврила — Ноябрь 27, 2008 @ 7:47 pm

  8. о чём вы тут вообще пишите? дурики

    Комментарий от Грехов — Декабрь 25, 2008 @ 1:37 am

  9. Где эта настройка логов? Найти никак не могу

    Комментарий от ХаусМД — Декабрь 27, 2008 @ 1:37 am

  10. ХаусМД всё детально описано в посте..читайте выше

    Комментарий от чихуахуа — Декабрь 29, 2008 @ 2:53 am

  11. Чего не радуете нас новыми обзорами?

    Комментарий от folder — Январь 4, 2009 @ 1:55 am

  12. int limit_req_fieldsize; Лимит длины HTTP заголовка.
    int limit_req_fields; Лимит количества заголовков в запросе.

    Комментарий от Май — Апрель 8, 2009 @ 7:48 am

  13. Где эта настройка логов? Найти никак не могу

    Комментарий от Дмитрий — Апрель 10, 2009 @ 6:35 pm

  14. Дмитрий всё детально описано в посте..читайте выше

    Комментарий от andryw — Апрель 19, 2009 @ 4:20 pm

Оставить комментарий

You must be logged in to post a comment.

© apachedev.ru, 2005-2011