Spec-Zone.ru › Apache HTTP Server

Модуль Apache mod_cgi

Описание: Выполнение сценариев CGI
Статус: Базовый
Идентификатор модуля: cgi_module
Исходный файл: mod_cgi.c

Краткое описание

Любой файл, у которого задан обработчик cgi-script, будет считаться сценарием CGI и выполняться сервером, а его вывод будет передаваться клиенту. Этот обработчик назначается файлам либо если их имя содержит расширение, определённое директивой AddHandler, либо если они находятся в каталоге ScriptAlias.

Введение в использование сценариев CGI с Apache см. в нашем руководстве Динамическое содержимое с CGI.

При использовании многопоточной MPM в Unix вместо этого модуля следует использовать модуль mod_cgid. На пользовательском уровне эти два модуля практически идентичны.

Для обратной совместимости обработчик cgi-script также будет активирован для любого файла с MIME-типом application/x-httpd-cgi. Использование специального MIME-типа считается устаревшим.

Переменные окружения CGI

Сервер задаёт переменные окружения CGI, описанные в спецификации CGI, со следующими оговорками:

PATH_INFO
Эта переменная будет недоступна, если директива AcceptPathInfo явно задана как off. По умолчанию, если AcceptPathInfo не задана, mod_cgi принимает информацию о пути (конечные /more/path/info после имени сценария в URI), тогда как основной сервер возвращает ошибку 404 NOT FOUND для запросов с дополнительной информацией о пути. Отсутствие директивы AcceptPathInfo эквивалентно заданию значения On для запросов mod_cgi.
REMOTE_HOST
Эта переменная задаётся только в том случае, если HostnameLookups имеет значение on (по умолчанию она отключена) и если обратный поиск DNS для адреса обращающегося хоста действительно возвращает имя хоста.
REMOTE_IDENT
Эта переменная задаётся только в том случае, если IdentityCheck имеет значение on и обращающийся хост поддерживает протокол ident. Обратите внимание, что на содержимое этой переменной нельзя полагаться, поскольку его легко подделать; кроме того, если между клиентом и сервером есть прокси-сервер, обычно эта переменная совершенно бесполезна.
REMOTE_USER
Эта переменная задаётся только в том случае, если сценарий CGI требует аутентификации.

Этот модуль также использует базовые функции ap_add_common_vars и ap_add_cgi_vars для добавления таких переменных окружения, как:

DOCUMENT_ROOT
Задаётся значением соответствующей директивы DocumentRoot.
SERVER_NAME
Полное доменное имя, связанное с запросом.
SERVER_ADDR
IP-адрес виртуального хоста, обрабатывающего запрос.
SERVER_ADMIN
Задаётся значением соответствующей директивы ServerAdmin.

Чтобы получить исчерпывающий список, рекомендуется написать простой сценарий CGI, который выводит все переданные Apache переменные окружения в удобном формате.

Отладка CGI

Отладка сценариев CGI традиционно была затруднена главным образом потому, что было невозможно изучить вывод (стандартный вывод и поток ошибок) сценариев, работающих некорректно. Эти директивы обеспечивают более подробное журналирование возникающих ошибок.

Формат журнала CGI

Если журнал ошибок CGI настроен, в него записываются сведения о каждом сценарии CGI, который выполняется некорректно. При сбое каждого сценария CGI в журнал записывается несколько строк информации. Первые две строки всегда имеют следующий формат:

%% [time] request-line
%% HTTP-status CGI-script-filename

Если ошибка заключается в том, что сценарий CGI не удаётся запустить, в файл журнала добавляются ещё две строки:

%%error
error-message

Если же ошибка вызвана возвратом сценарием некорректной информации в заголовке (часто из-за ошибки в сценарии), записывается следующая информация:

%request
All HTTP request headers received
POST or PUT entity (if any)
%response
All headers output by the CGI script
%stdout
CGI standard output
%stderr
CGI standard error

(Части %stdout и %stderr могут отсутствовать, если сценарий ничего не вывел в стандартный вывод или поток ошибок.)

Директива CGIScriptTimeout

Описание: Время ожидания дополнительного вывода от программы CGI
Синтаксис:
CGIScriptTimeout time[s|ms]
Значение по умолчанию:
value of Timeout directive when unset
Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess
Статус: Базовый
Модуль: mod_cgi
Совместимость: Доступна начиная с версии 2.4.59.

Эта директива ограничивает время ожидания дополнительного вывода от программы CGI. По истечении этого времени запрос и процесс CGI завершаются.

Пример

CGIScriptTimeout 20

Директива ScriptLog

Описание: Расположение файла журнала ошибок сценариев CGI
Синтаксис:
ScriptLog file-path
Контекст: конфигурация сервера, виртуальный хост
Статус: Базовый
Модуль: mod_cgi, mod_cgid

Директива ScriptLog задаёт файл журнала ошибок сценариев CGI. Если ScriptLog не указан, журнал ошибок не создаётся. Если он указан, все ошибки CGI записываются в файл, заданный в качестве аргумента. Если указан относительный путь или имя файла, они рассматриваются относительно ServerRoot.

Пример

ScriptLog logs/cgi_log

Этот журнал будет открыт от имени пользователя, под которым работают дочерние процессы, то есть пользователя, указанного в основной директиве User. Это означает, что каталог, в котором находится журнал сценариев, должен быть доступен для записи этому пользователю, либо файл необходимо создать вручную и предоставить этому пользователю права на запись. Если вы размещаете журнал сценариев в основном каталоге журналов, НЕ меняйте права доступа к каталогу, чтобы предоставить пользователю, от имени которого работают дочерние процессы, право записи.

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

Директива ScriptLogBuffer

Описание: Максимальный объём данных запросов PUT или POST, записываемых в журнал сценариев
Синтаксис:
ScriptLogBuffer bytes
Значение по умолчанию:
ScriptLogBuffer 1024
Контекст: конфигурация сервера, виртуальный хост
Статус: Базовый
Модуль: mod_cgi, mod_cgid

Размер тела любого запроса PUT или POST, записываемого в файл, ограничен. Это предотвращает слишком быстрый рост файла журнала при получении больших тел запросов. По умолчанию записывается до 1024 байт, но это значение можно изменить с помощью данной директивы.

Директива ScriptLogLength

Описание: Ограничение размера файла журнала сценариев CGI
Синтаксис:
ScriptLogLength bytes
Значение по умолчанию:
ScriptLogLength 10385760
Контекст: конфигурация сервера, виртуальный хост
Статус: Базовый
Модуль: mod_cgi, mod_cgid

Директиву ScriptLogLength можно использовать для ограничения размера файла журнала сценариев CGI. Поскольку для каждой ошибки CGI в журнал записывается много информации (все заголовки запроса, весь вывод сценария), файл может стать очень большим. Чтобы избежать проблем, вызванных неограниченным ростом, с помощью этой директивы можно задать максимальный размер файла журнала CGI. Если размер файла превысит это значение, дальнейшая запись информации в него прекратится.

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_cgi.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API