Модуль 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