Apache. Документация на русском


Разделы:   1    2    3    4    5    6    7    8    9      10      11    12    13    14    15    16  

Раздел 10. Модули Апача

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101    102    103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131      132      133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

 <         > 
  RU            EN  

Пункт 132. Модуль Apache mod_dbd

mod_dbd управляет соединениями с базой данных SQL с помощью APR . Он обеспечивает подключение к базе данных по запросу к модулям, требующим функций базы данных SQL, и заботится об управлении базами данных с оптимальной эффективностью и масштабируемостью как для потоковых, так и для непоточных MPM. Дополнительные сведения см. на веб-сайте APR и в этом обзоре Apache DBD Framework, подготовленном его первоначальным разработчиком.

Пул соединений

Этот модуль управляет подключениями к базе данных способом, оптимизированным для платформы. На непоточных платформах он обеспечивает постоянное соединение наподобие классического LAMP (Linux, Apache, Mysql, Perl/PHP/Python). На многопоточной платформе он обеспечивает в целом более масштабируемый и эффективный пул соединений , как описано в этой статье на ApacheTutor. Обратите внимание, что mod_dbd заменяет модули, представленные в этой статье.

Подключение

Чтобы подключиться к вашей базе данных, вам необходимо указать драйвер и параметры подключения. Они варьируются от одного ядра базы данных к другому. Например, чтобы подключиться к mysql, сделайте следующее:

 DBDriver mysql
DDBParams host=localhost,dbname=pony,user=shetland,pass=appaloosa 

Затем вы можете использовать это соединение во множестве других модулей, включая mod_rewrite , mod_authn_dbd , и mod_lua . Дальнейшие примеры использования приведены в документации каждого из этих модулей.

См DBDParams . информацию о строке подключения для каждого из поддерживаемых драйверов баз данных.

Апач ДБД API

mod_dbd экспортирует пять функций для использования другими модулями. API выглядит следующим образом:

 структура typedef {
 апр_дбд_т *дескриптор;
 apr_dbd_driver_t *водитель;
 apr_hash_t *подготовлено;
} ap_dbd_t;
/* Экспорт функций для доступа к базе данных */
/* установить соединение, которое ДОЛЖНО быть явно закрыто.
 * Возвращает NULL при ошибке
 */
AP_DECLARE(ap_dbd_t*) ap_dbd_open(apr_pool_t*, server_rec*);
/* отключаем соединение, полученное с помощью ap_dbd_open */
AP_DECLARE(void) ap_dbd_close(server_rec*, ap_dbd_t*);
/* установить соединение, которое будет иметь время существования запроса
 * и НЕ ДОЛЖЕН быть явно закрыт. Возвращает NULL при ошибке.
 * Это предпочтительная функция для большинства приложений.
 */
AP_DECLARE(ap_dbd_t*) ap_dbd_acquire(request_rec*);
/* получить соединение, которое будет иметь время существования соединения
 * и НЕ ДОЛЖЕН быть явно закрыт. Возвращает NULL при ошибке.
 */
AP_DECLARE(ap_dbd_t*) ap_dbd_cacquire(conn_rec*);
/* Подготовить оператор для использования клиентским модулем */
AP_DECLARE(void) ap_dbd_prepare(server_rec*, const char*, const char*);
/* Также экспортируйте их как необязательные функции для модулей, которые предпочитают это */
APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_open, (apr_pool_t*, server_rec*));
APR_DECLARE_OPTIONAL_FN(void, ap_dbd_close, (server_rec*, ap_dbd_t*));
APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_acquire, (request_rec*));
APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_cacquire, (conn_rec*));
APR_DECLARE_OPTIONAL_FN(void, ap_dbd_prepare, (server_rec*, const char*, const char*)); 

Подготовленные операторы SQL

mod_dbd поддерживает подготовленные операторы SQL от имени модулей, которые могут захотеть их использовать. Каждому подготовленному оператору должно быть присвоено имя (метка), и они хранятся в хеше: поле prepared файла ap_dbd_t . Записи хэша имеют тип apr_dbd_prepared_t и могут использоваться в любом из SQL-запросов с подготовленным оператором apr_dbd или в командах выбора.

Пользовательские модули dbd должны использовать подготовленные операторы и документировать, какие операторы могут быть указаны в apache2.conf, или предоставлять свои собственные директивы и использовать файлы ap_dbd_prepare .

Предостережение

При использовании подготовленных операторов с базой данных MySQL предпочтительно установить reconnect значение 0 в строке подключения, чтобы избежать ошибок, возникающих при повторном подключении клиента MySQL без надлежащего сброса подготовленных операторов. Если установлено значение 1, будут предприняты попытки исправления любых разорванных соединений, но, поскольку mod_dbd не проинформирован, подготовленные операторы будут признаны недействительными.

ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ

Любое веб-приложение/приложение базы данных должно защищать себя от атак SQL-инъекций. В большинстве случаев Apache DBD безопасен, поскольку приложения используют подготовленные операторы, а ненадежные входные данные всегда используются только как данные. Конечно, если вы используете его через сторонние модули, вам следует выяснить, какие меры предосторожности они могут потребовать.

Однако драйвер FreeTDS по своей сути небезопасен . Базовая библиотека не поддерживает подготовленные операторы, поэтому драйвер эмулирует их, а ненадежные входные данные объединяются в оператор SQL.

Его можно сделать безопасным, очистив все входные данные: процесс, вдохновленный проверкой испорченности в Perl. Каждый ввод сопоставляется с регулярным выражением, и используется только совпадение в соответствии с идиомой Perl:

       $untrusted =~ /([a-z]+)/;
 $trusted = $1;    

Чтобы использовать это, незапятнанные регулярные выражения должны быть включены в настроенные подготовленные операторы. Регулярное выражение следует сразу после % в подготовленном операторе и заключено в фигурные скобки {}. Например, если ваше приложение ожидает буквенно-цифровой ввод, вы можете использовать:

"SELECT foo FROM bar WHERE input = %s"

с другими драйверами и не страдают ничем хуже, чем неудачный запрос. Но с FreeTDS вам понадобится:

"SELECT foo FROM bar WHERE input = %{([A-Za-z0-9]+)}s"

Теперь все, что не соответствует совпадению $1 в регулярном выражении, отбрасывается, поэтому инструкция безопасна.

Альтернативой этому может быть сторонний драйвер ODBC, который обеспечивает безопасность подлинных подготовленных операторов.



Директива DBDExptime

Описание:Время активности для незанятых соединений
Синтаксис: DBDExptime time-in-seconds
По умолчанию: DBDExptime 300
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_dbd

Установите время, в течение которого неиспользуемые соединения будут активны, когда количество соединений, указанное в DBDKeep, превышено (только для многопоточных платформ).



Директива DBDInitSQL

Описание:Выполнить оператор SQL после подключения к базе данных
Синтаксис: DBDInitSQL "SQL statement"
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_dbd

Модули, которые этого желают, могут иметь один или несколько операторов SQL, выполняемых при создании соединения с базой данных. Примером использования может быть инициализация определенных значений или добавление записи в журнал при установлении нового подключения к базе данных.



Директива DBDKeep

Описание:Максимальное постоянное количество подключений
Синтаксис: DBDKeep number
По умолчанию: DBDKeep 2
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_dbd

Установите максимальное количество поддерживаемых соединений на процесс, кроме обработки пиковой нагрузки (только для многопоточных платформ).



Директива DBDMax

Описание:Максимальное количество подключений
Синтаксис: DBDMax number
По умолчанию: DBDMax 10
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_dbd

Установите жесткое максимальное количество подключений на процесс (только для многопоточных платформ).



Директива DBDMin

Описание:Минимальное количество подключений
Синтаксис: DBDMin number
По умолчанию: DBDMin 1
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_dbd

Установите минимальное количество подключений на процесс (только для многопоточных платформ).



Директива DDBParams

Описание:Параметры подключения к базе данных
Синтаксис: DBDParams param1=value1[,param2=value2]
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_dbd

В соответствии с требованиями базового драйвера. Обычно это будет использоваться для передачи того, что не может быть по умолчанию среди имени пользователя, пароля, имени базы данных, имени хоста и номера порта для подключения.

Параметры строки подключения для текущих драйверов включают:

FreeTDS (для MSSQL и SyBase)
имя пользователя, пароль, имя приложения, имя базы данных, хост, кодировка, язык, сервер
MySQL
host, port, user, pass, dbname, sock, flags, fldsz, group, reconnect
Оракул
пользователь, пароль, имя БД, сервер
PostgreSQL
Строка подключения передается напрямую в PQconnectdb
SQLite2
Строка подключения разделена двоеточием и part1:part2 используется как sqlite_open(part1, atoi(part2), NULL)
SQLite3
Строка подключения передается напрямую в sqlite3_open
ODBC
источник данных, пользователь, пароль, подключение, ctimeout, тайм-аут, доступ, txmode, bufsize


Директива DBDPersist

Описание:Использовать ли постоянные соединения
Синтаксис: DBDPersist On|Off
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_dbd

Если установлено значение «Выкл.», постоянные соединения и соединения в пуле отключены. Новое соединение с базой данных открывается по запросу клиента и закрывается сразу после освобождения. Этот параметр предназначен для отладки и малоиспользуемых серверов.

По умолчанию включен пул постоянных соединений (или одно постоянное соединение в стиле LAMP в случае сервера без потоков), и его почти всегда следует использовать в работе.

До версии 2.2.2 эта директива принимала только значения 0 и 1 вместо Off и On соответственно.



Директива DBDPrepareSQL

Описание:Определить подготовленный оператор SQL
Синтаксис: DBDPrepareSQL "SQL statement" label
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_dbd

Для таких модулей, как аутентификация, которые многократно используют один оператор SQL, оптимальная производительность достигается за счет подготовки оператора при запуске, а не при каждом его использовании. Эта директива подготавливает оператор SQL и присваивает ему метку.



Директива DBDriver

Описание:Укажите драйвер SQL
Синтаксис: DBDriver name
Контекст:конфигурация сервера, виртуальный хост
Положение дел:Расширение
Модуль:mod_dbd

Выбирает драйвер apr_dbd по имени. Драйвер должен быть установлен в вашей системе (в большинстве систем это будет общий объект или dll). Например, DBDriver mysql драйвер MySQL будет выбран в файле apr_dbd_mysql.so.



 <         > 

Пункты:   85    86    88    89    90    91    92    93    94    95    96    97    98    99    100    101    102    103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131      132      133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    163    164    165    166    167    168    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    203    204    205    206    207    208    209    210    211    212    213  

Рейтинг@Mail.ru