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