Раздел 2. Использование HTTP-сервера Apache RU EN Пункт 20. Переменные окружения в Apache Существует два типа переменных среды, влияющих на HTTP-сервер Apache. Во-первых, это переменные среды, контролируемые основной операционной системой. Они устанавливаются перед запуском сервера. Их можно использовать в расширениях в файлах конфигурации и при желании можно передать в сценарии CGI и SSI с помощью директивы PassEnv. Во-вторых, HTTP-сервер Apache предоставляет механизм для хранения информации в именованных переменных, которые также называются переменными среды . Эта информация может использоваться для управления различными операциями, такими как ведение журнала или управление доступом. Переменные также используются в качестве механизма для связи с внешними программами, такими как сценарии CGI. В этом документе обсуждаются различные способы управления и использования этих переменных. Хотя эти переменные называются переменными среды , они не совпадают с переменными среды, управляемыми базовой операционной системой. Вместо этого эти переменные хранятся и обрабатываются во внутренней структуре Apache. Они становятся фактическими переменными среды операционной системы только тогда, когда они предоставляются сценариям CGI и сценариям включения на стороне сервера. Если вы хотите манипулировать средой операционной системы, в которой работает сам сервер, вы должны использовать стандартные механизмы манипулирования средой, предоставляемые оболочкой вашей операционной системы. Установка переменных среды
Основные манипуляции с окружающей средойСамый простой способ установить переменную среды в Apache — использовать безусловную Условные настройки для каждого запросаДля дополнительной гибкости директивы позволяют
Уникальные идентификаторыНаконец, Стандартные переменные CGIВ дополнение ко всем переменным среды, установленным в конфигурации Apache и переданным из оболочки, сценарии CGI и страницы SSI снабжены набором переменных среды, содержащих метаинформацию о запросе, как того требует спецификация CGI. Некоторые предостережения
Использование переменных среды
CGI-скриптыОдним из основных применений переменных среды является передача информации сценариям CGI. Как обсуждалось выше, среда, передаваемая сценариям CGI, включает в себя стандартную метаинформацию о запросе в дополнение к любым переменным, установленным в конфигурации Apache. Дополнительные сведения см. в руководстве по CGI. Страницы SSIДокументы, проанализированные сервером (SSI), обработанные
Контроль доступаДоступ к серверу можно контролировать на основе значения переменных среды с помощью директив Условное ведение журналаПеременные среды могут быть зарегистрированы в журнале доступа с помощью Заголовки условного ответаДиректива Активация внешнего фильтраВнешние фильтры, настроенные с Перезапись URLФорма TestString
позволяет механизму перезаписи принимать решения , зависящие от переменных среды. Обратите внимание, что переменные, доступные
без префикса, на самом деле не являются переменными среды. Скорее, это специальные переменные, к
которым нельзя получить доступ из других модулей. Переменные среды специального назначенияПроблемы с функциональной совместимостью привели к введению механизмов изменения поведения Apache при общении с конкретными клиентами. Чтобы сделать эти механизмы как можно более гибкими, они вызываются путем определения переменных среды, обычно с помощью даунгрейд-1.0Это заставляет запрос обрабатываться как запрос HTTP/1.0, даже если он был на более позднем диалекте. принудительное сжатиеЕсли у вас форс-не-вариантЭто приводит к сила-реакция-1.0Это вызывает ответ HTTP/1.0 клиентам, делающим запрос HTTP/1.0. Первоначально он был реализован в результате проблемы с прокси-серверами AOL. Некоторые клиенты HTTP/1.0 могут вести себя некорректно при получении ответа HTTP/1.1, и это можно использовать для взаимодействия с ними. gzip-только-текст/htmlЕсли установлено значение «1», эта переменная отключает
без gzipЕсли установлено, без кэшаДоступно в версиях 2.2.12 и выше Если установлено, неактивенЭто отключается предпочтительный языкЭто влияет на перенаправить-осторожноЭто заставляет сервер быть более осторожным при отправке перенаправления клиенту. Обычно это используется, когда у клиента есть известная проблема с обработкой перенаправлений. Первоначально это было реализовано в результате проблемы с программным обеспечением Microsoft WebFolders, которое имеет проблемы с обработкой перенаправлений на ресурсы каталогов с помощью методов DAV. подавить-ошибка-кодировкаДоступно в версиях после 2.0.54 Когда Apache выполняет перенаправление в ответ на запрос клиента, ответ включает некоторый фактический текст, который будет отображаться на случай, если клиент не может (или не будет) автоматически следовать перенаправлению. Apache обычно маркирует этот текст в соответствии с используемым набором символов, то есть ISO-8859-1. Однако, если перенаправление осуществляется на страницу, использующую другой набор символов, некоторые неработающие версии браузера попытаются использовать набор символов из текста перенаправления, а не фактическую страницу. Это может привести, например, к неправильному переводу греческого языка. Установка этой переменной среды приводит к тому, что Apache опускает набор символов для текста перенаправления, и эти неработающие браузеры затем будут правильно использовать набор символов целевой страницы. Примечание о безопасностиОтправка страниц с ошибками без указанного набора символов может привести к атаке с использованием межсайтовых сценариев для существующих браузеров (MSIE), которые не соответствуют спецификации HTTP/1.1 и пытаются «угадать» набор символов из содержимого. Такие браузеры можно легко обмануть, заставив использовать набор символов UTF-7, а содержимое UTF-7 из входных данных (например, URI запроса) не будет экранировано обычными механизмами экранирования, разработанными для предотвращения межсайтовых атак. Force-proxy-request-1.0, proxy-nokeepalive, proxy-sendchunked, proxy-sendcl, proxy-chain-auth, proxy-interim-response, proxy-initial-not-poolЭти директивы изменяют поведение протокола
ПримерыПередача неработающих заголовков в CGI-скриптыНачиная с версии 2.4, Apache более строго относится к преобразованию заголовков HTTP в переменные среды в Если вам нужно поддерживать клиент, который отправляет неработающие заголовки и который не может быть исправлен, простое обходное решение, включающее # # Следующее работает с клиентом, отправляющим неверный Accept_Encoding # заголовок. # SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1 RequestHeader set Accept-Encoding %{fix_accept_encoding}e env=fix_accept_encoding Изменение поведения протокола при некорректном поведении клиентовВ более ранних версиях рекомендуется включать следующие строки в apache2.conf для решения известных проблем клиента. Поскольку затронутые клиенты больше не видны в дикой природе, эта конфигурация, вероятно, больше не нужна. # # Следующие директивы изменяют обычное поведение ответа HTTP. # Первая директива отключает поддержку активности для Netscape 2.x и браузеров, которые # обманывать. Известны проблемы с этими реализациями браузера. # Вторая директива для Microsoft Internet Explorer 4.0b2 # который имеет сломанную реализацию HTTP/1.1 и неправильно # поддержка поддержки активности, когда она используется в ответах 301 или 302 (перенаправление). # BrowserMatch "Mozilla/2" BrowserMatch "MSIE 4\.0b2;" nokeepalive даунгрейд-1.0 форс-реакция-1.0 # # Следующая директива отключает ответы HTTP/1.1 для браузеров, которые # нарушают спецификацию HTTP/1.0, поскольку не могут понять # базовый ответ 1.1. # BrowserMatch "RealPlayer 4\.0" принудительный ответ-1.0 BrowserMatch "Java/1\.0" принудительный ответ-1.0 BrowserMatch "JDK/1\.0" принудительный ответ-1.0 Не регистрировать запросы изображений в журнале доступаВ этом примере запросы изображений не отображаются в журнале доступа. Его можно легко изменить, чтобы предотвратить регистрацию определенных каталогов или запретить регистрацию запросов, поступающих с определенных хостов. SetEnvIf Request_URI \.gif запрос изображения SetEnvIf Request_URI \.jpg изображение-запрос SetEnvIf Request_URI \.png изображение-запрос Журналы CustomLog/access_log общий env=!image-request Предотвратить «кражу изображений»В этом примере показано, как запретить людям, которые не находятся на вашем сервере, использовать изображения с вашего сервера в качестве встроенных изображений на своих страницах. Это не рекомендуемая конфигурация, но она может работать в ограниченных обстоятельствах. Мы предполагаем, что все ваши изображения находятся в каталоге с именем SetEnvIf Referer "^http://www\.example\.com/" local_referal # Разрешить браузеры, которые не отправляют информацию о реферере SetEnvIf Referer "^$" local_referal <Каталог "/web/images"> Требовать env local_referal </Каталог> Для получения дополнительной информации об этом методе см. руководство «Сохранение ваших изображений от украшения других сайтов» на ServerWatch. |