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  

Пункт 141. Модуль Apache mod_ext_filter

mod_ext_filter представляет простую и знакомую модель программирования для фильтров. С помощью этого модуля программа, которая читает со стандартного ввода и записывает на стандартный вывод (т. е. команда фильтрации в стиле Unix), может быть фильтром для Apache. Этот механизм фильтрации намного медленнее, чем использование фильтра, специально написанного для Apache API и работающего внутри серверного процесса Apache, но он имеет следующие преимущества:

  • модель программирования намного проще
  • можно использовать любой язык программирования/скриптов при условии, что он позволяет программе читать со стандартного ввода и записывать на стандартный вывод
  • существующие программы можно использовать без изменений в качестве фильтров Apache

Даже когда рабочие характеристики не подходят для производственного использования, mod_ext_filter можно использовать среду в качестве прототипа для фильтров.

Примеры

Генерация HTML из другого типа ответа

 # директива mod_ext_filter для определения фильтра
# HTML-форматировать файлы text/c с помощью внешнего
# программа /usr/bin/enscript с типом
# результирующий набор text/html
ExtFilterDefine режим c-to-html = вывод \
 intype=текст/c outtype=текст/html \
 cmd="/usr/bin/enscript --color -W html -Ec -o - -"
<Каталог "/export/home/trawick/apacheinst/htdocs/c">
 # основная директива, чтобы заставить новый фильтр
 # запускать на выходе
 SetOutputFilter c-to-html
 
 # директива mod_mime для установки типа .c
 # файлы в text/c
 AddType text/c .c
</Каталог> 

Реализация фильтра кодирования контента

Примечание: этот пример gzip предназначен только для иллюстрации. Пожалуйста, обратитесь mod_deflate к практической реализации.

 # директива mod_ext_filter для определения внешнего фильтра
Режим ExtFilterDefine gzip = вывод cmd = / bin / gzip
<Расположение "/gzip">
 
 # основная директива, чтобы фильтр gzip был
 # запускаем на выходе
 SetOutputFilter gzip
 
 # директива mod_headers для добавления
 # Поле заголовка "Content-Encoding: gzip"
 Набор заголовков Content-Encoding gzip
</местоположение> 

Замедление сервера

 # директива mod_ext_filter для определения фильтра
# который запускает все через cat; кошка не
# изменить что-нибудь; он просто вводит дополнительную длину пути
# и потребляет больше ресурсов
Режим замедления ExtFilterDefine=выход cmd=/bin/cat \
 сохраняет длину содержимого
<Расположение "/">
 # основная директива, чтобы заставить фильтр замедления работать
 # запускаться несколько раз на выходе
 #
 SetOutputFilter замедление; замедление; замедление
</местоположение> 

Использование sed для замены текста в ответе

 # директива mod_ext_filter для определения фильтра,
# заменяет текст в ответе
#
ExtFilterDefine fixtext mode=output intype=text/html \
 cmd="/bin/sed s/verdana/arial/g"
<Расположение "/">
 # основная директива, чтобы заставить фильтр fixtext
 # запускать на выходе
 Фиксированный текст SetOutputFilter
</местоположение> 

Вы можете сделать то же самое, используя mod_substitute без вызова внешнего процесса.

Отслеживание другого фильтра

 # Отследить данные, прочитанные и записанные mod_deflate
# для конкретного клиента (IP 192.168.1.31)
# возникли проблемы со сжатием.
# Этот фильтр будет отслеживать, что входит в mod_deflate.
ExtFilterDefine tracebefore \
 cmd="/bin/tracefilter.pl /tmp/tracebefore" \
 EnableEnv=trace_this_client
# Этот фильтр будет отслеживать, что следует за mod_deflate.
# Обратите внимание, что без параметра ftype значение по умолчанию
# тип фильтра AP_FTYPE_RESOURCE вызовет
# фильтр должен быть размещен *перед* mod_deflate в фильтре
# цепь. Присвоив ему числовое значение, немного превышающее
# AP_FTYPE_CONTENT_SET гарантирует, что он будет размещен
# после mod_deflate.
ExtFilterDefine после трассировки \
 cmd="/bin/tracefilter.pl /tmp/traceafter" \
 EnableEnv=trace_this_client ftype=21
<Каталог "/usr/local/docs">
 SetEnvIf Remote_Addr 192.168.1.31 trace_this_client
 SetOutputFilter tracebefore;deflate;traceafter
</Каталог> 

Вот фильтр, который отслеживает данные:

 #!/usr/local/bin/perl -w
использовать строгий;
открыть(СОХРАНИТЬ, ">$ARGV[0]")
 или умереть "не удается открыть $ARGV[0]: $?";
в то время как (<STDIN>) {
 напечатать СОХРАНИТЬ $_;
 напечатать $_;
}
закрыть(СОХРАНИТЬ); 


Директива ExtFilterDefine

Описание:Определить внешний фильтр
Синтаксис: ExtFilterDefine filtername parameters
Контекст:конфигурация сервера
Положение дел:Расширение
Модуль:mod_ext_filter

Директива ExtFilterDefine определяет характеристики внешнего фильтра, включая запускаемую программу и ее аргументы.

filtername указывает имя определяемого фильтра. Затем это имя можно использовать в SetOutputFilter директивах. Он должен быть уникальным среди всех зарегистрированных фильтров. В настоящее время API-интерфейс регистрации-фильтра не сообщает об ошибках, поэтому пользователю не сообщается о проблеме с повторяющимися именами.

Последующие параметры могут появляться в любом порядке и определять запускаемую внешнюю команду и некоторые другие характеристики. Единственным обязательным параметром является cmd= . Эти параметры:

cmd=cmdline
Ключевое cmd= слово позволяет указать внешнюю команду для запуска. Если после имени программы есть аргументы, командная строка должна быть заключена в кавычки ( например , , .) Обычное цитирование оболочки не требуется, так как программа запускается напрямую, минуя оболочку. Аргументы программы разделены пробелами. Обратная косая черта может использоваться для экранирования пробелов, которые должны быть частью аргумента программы. Любая обратная косая черта, являющаяся частью аргумента, должна быть экранирована обратной косой чертой. В дополнение к стандартным переменным среды CGI для программы также будут установлены DOCUMENT_URI, DOCUMENT_PATH_INFO и QUERY_STRING_UNESCAPED. cmd="/bin/mypgm arg1 arg2"
mode=mode
Используйте mode=output (по умолчанию) для фильтров, обрабатывающих ответ. Используйте mode=input для фильтров, обрабатывающих запрос. mode=input доступен в Apache 2.1 и более поздних версиях.
intype=imt
Этот параметр определяет тип интернет-носителя ( т. е . тип MIME) документов, которые должны быть отфильтрованы. По умолчанию фильтруются все документы. Если intype= указано, фильтр будет отключен для документов других типов.
outtype=imt
Этот параметр определяет тип интернет-носителя ( например , тип MIME) отфильтрованных документов. Это полезно, когда фильтр меняет тип интернет-медиа как часть операции фильтрации. По умолчанию тип интернет-медиа не меняется.
PreservesContentLength
Ключевое PreservesContentLength слово указывает, что фильтр сохраняет длину содержимого. Это не значение по умолчанию, так как большинство фильтров изменяют длину содержимого. В случае, если фильтр не изменяет длину, необходимо указать это ключевое слово.
ftype=filtertype
Этот параметр указывает числовое значение для типа фильтра, в качестве которого фильтр должен быть зарегистрирован. В большинстве случаев достаточно значения по умолчанию, AP_FTYPE_RESOURCE. Если фильтр должен работать в другой точке цепочки фильтров, чем фильтры ресурсов, то этот параметр будет необходим. См. определения AP_FTYPE_foo в util_filter.h для соответствующих значений.
disableenv=env
Этот параметр указывает имя переменной среды, которая, если она установлена, отключит фильтр.
enableenv=env
Этот параметр указывает имя переменной среды, которую необходимо установить, иначе фильтр будет отключен.


Директива ExtFilterOptions

Описание:Настроить mod_ext_filter параметры
Синтаксис: ExtFilterOptions option [option] ...
По умолчанию: ExtFilterOptions NoLogStderr
Контекст:каталог
Положение дел:Расширение
Модуль:mod_ext_filter

Директива ExtFilterOptions определяет специальные параметры обработки для файлов mod_ext_filter . Вариант может быть одним из

LogStderr | NoLogStderr
Ключевое LogStderr слово указывает, что сообщения, записываемые в стандартную ошибку внешней программой-фильтром, будут сохраняться в журнале ошибок Apache. NoLogStderr отключает эту функцию.
Onfail=[abort|remove]
Определяет, как действовать, если программа внешнего фильтра не может быть запущена. С abort (значение по умолчанию) запрос будет прерван. При remove , фильтр снимается и запрос продолжается без него.
 Экстфилтероптионс логстдерр 

Сообщения, записанные в стандартную ошибку фильтра, будут храниться в журнале ошибок Apache.



 <         > 

Пункты:   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