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-скрипта также будет активирован для любого файла с 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 могут отсутствовать, если скрипт не выводил ничего в стандартный вывод или стандартный поток ошибок).

Директива ScriptLog

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

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

Пример

ScriptLog logs/cgi_log

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

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

Директива ScriptLogBuffer

Описание: Максимальное количество запросов PUT или POST, которые будут записаны в scriptlog
Синтаксис:
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