Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Администрирование сервера Apache и руководство по электронной коммерции

.pdf
Скачиваний:
107
Добавлен:
01.05.2014
Размер:
4.5 Mб
Скачать

Б.30. Модуль mod_setenvif

Этот модуль используется для условной установки переменных окружения на ос новании значений, полученных из запроса клиента.

Б.30.1. Директива BrowserMatch

Синтаксис:

 

BrowserMatch регулярное выражение envar [=значение] [...}

Умолчание:

,

нет

Контекст:

 

конфигурация сервера

Перекрытие:

 

нет

Статус

 

Base

Модуль:

 

mod_setenvif

Совместимость:

 

Apache 1.2 и выше (в Apache 1.2 эту директиву можно найти в

 

 

отсутствующем сейчас модуле mod_browser)

Эта директива используется для установки некоторых переменных окружения на основании значения Use Agent HTTP из заголовка запроса.

: Чтобы установить переменную среды browser в значение ''explorer", когда значение заголовка, User_Agent "MSIE", воспользуйтесь следующей директивой:

BrowserMatch MSIE browser=explorer

30.2.Директива BrowserMatchNoCase

Синтаксис:

BrowserMatchNoCase регулярное выражение envar [=значение\

 

[...]

Умолчание:

нет

Контекст:

конфигурация сервера

Перекрытие:

нет

Статус

ваsе

Модуль:

mod_setenvif

Совместимость:

Apache 1.2 и выше (в Apache 1.2 эту директиву можно найти в от

 

сутствующем сейчас модуле mod_browser)

Эта директива тождественна директиве BrowserMatch с единственным отличием, которое заключается в том, что сравнение производится без учета регистра данных.

Чтобы установить переменную среды browser в значение "explorer", когда заголовок

User_Agent

имеет значение "Msie", "msie" или, вероятно, "MsIe", воспользуйтесь следующей

директивой:

•:•

BrowserMatchNoCase MSIE browser=explorer

Б.30.3. Директива SetEnvIf

Синтаксис:

SetEnvif атрибут регулярное выражение envar [=значение\

 

[...]

Умолчание:

нет

Контекст:

конфигурация сервера

Статус

Base

242

Часть IV. Приложения

Модуль:

mod_setenvif

Совместимость:

Apache 1.3 и выше (ключевое слово Request_Protocol и срав

 

нение переменной среды есть только в версии 1.3.7 и выше)

Эта директива используется для установки переменных окружения на основании значений, полученных в запросе. Несколько наиболее популярныхзначений перечис лено в табл. Б.10.

Таблица Б.10. Условные значения директивы SetEnvIf

Remote_Host

Имя узла клиента, сделавшего запрос.

Remote_Addr

IP адрес узла клиент а, сделавшего запрос.

Remote_User

Идентифицированное имя пользователя.

Request_Method

Используемый метод (например POST, GET).

Request_Protocol

Название и версия протокола, с помощью которого был произ

 

ведензапрос(например НТТР/0.9, НТТР/1.1 ит.д.).

• Чтобы установить системную переменную cg i_yn в "у", когда URI получает доступ к Perl сценарию, воспользуемсядирективой:

SetEnvIf Request URI "\.pl$" cgi yn=y

Б.30.4. Директива SetEnvIfNoCase

Синтаксис:

SetEnvIfNoCase

Умолчание:

нет

Контекст:

конфигурация сервера

Перекрытие:

нет

Статус:

Base

Модуль:

mod_setenvif

Совместимость:

Apache 1.3 и выше

Эта директива тождественна директиве SetEnvIf за исключением учета регистров символов.

Б.31.Модульmod_so

Этот модуль используется для загрузки различных модулей в сервер Apache во время его работы. Отметим, что в отличие от ОС Unix в ОС Windows он по умолча нию установлен в on.

Б.31.1. Директива LoadFile

Синтаксис:

LoadFile имя файла имя файла . . .

Контекст:

конфигурация сервера

Статус:

Base

Модуль:

mod_so

Этот модуль используется для подключения указанного объектного файла или библиотеки в момент запуска или перезапуска сервера.

Приложение Б. Прочие директивы

243

Б.31.2. Директива LoadModule

Синтаксис:

LoadModule модуль имя файла

Контекст:

конфигурация сервера

Статус

Base

Модуль:

mod_so

Этот модуль используется для подключения определенного объектного файла или биб лиотеки и добавления структуры соответствующего модуля к списку активных файлов.

Чтобы загрузить во время работы сервера модуль mod_status, находящийся в подкаталоге module каталога ServerRoot, воспользуемся директивой:

LoadModule status module modules/mod status.so

Б.32. Модуль mod_speling

Этот модуль предназначен для исправления ошибок в URL, которые могут допус тить пользователи при вводе адреса.

Б.32.1. Директива CheckSpelling

Синтаксис:

CheckSpelling

on/off

Умолчание:

CheckSpelling

on

Контекст:

конфигурация сервера, виртуальный узел, каталог, файл .htaccess

Перекрытие:

Options

 

Статус

Base

 

Модуль:

mod_speling

 

Эта директива включает/отключает возможность проверки URL.

Для включения режима проверки достаточно задать директиву:

CheckSpelling on

Б.33. Модуль mod status

Этот модуль предназначен для отображения статистики работы сервера в виде Web страницы.

Б.33.1. Директива ExtendedStatus

Синтаксис:

ExtendedStatus

On | Off

Умолчание:

ExtendedStatus

Off

Контекст:

конфигурация сервера

Статус

Base

 

Модуль:

mod_status

 

Совместимость:

директива ExtendedStatus имеется только в сервере Apache 1.3.2

 

и выше

 

Эта директива предназначена для включения режима хранения детализированной статистической информации ПО каждому запросу. Обратите внимание на то, что дета

244

Часть IV. Приложения

лизированная информация может сохраняться или не сохраняться для всего сервера целиком, ее нельзя задавать на уровне виртуального узла.

Чтобы включить отслеживание детализированной статистической информации, необходимо воспользо ваться директивой:

ExtendedStatus on

Б.34. Модуль mod_unique_id

Этот модуль генерирует для каждого запроса уникальный маркер и применим только на Unix машинах. Он не имеет директив.

Б.35. Модуль mod userdir

Этот модуль хранится в файле mod_userdir.c и компилируется по умолчанию. Де тальное описание этого модуля можно найти в главе 5, "Хостинг нескольких Web узлов".

Б.35.1. Директива UserDir

Синтаксис:

UserDir каталог/имя файла

Умолчание:

UserDirpublic_html

Контекст:

конфигурация сервера, виртуальный узел

Перекрытие:

Options

Статус:

Base

Модуль:

mod_userdir

Совместимость:

Apache 1.2 (частично), Apache 1.3

Эта директива определяет подкаталоги, находящиеся в корневом каталоге пользо вателя в файловой системе, в которую направляются запросы при запросе документов пользователя.

: Чтобы сервер Apache направлял запросы к документам пользователя в подкаталог htdocs, располо женный в корневом каталоге, необходимо задать следующую директиву:

UserDir htdocs

Б.36. Модуль mod usertrack

Модуль mod_usertrack (ранее известный как модуль cookies) обеспечивает работу с файлами cookies.

Б.36.1. Директива CookieExpires

Синтаксис:

CookieExpires срок действия

Контекст:

конфигурация сервера, виртуальный узел

Статус:

Optional

Модуль:

mod_use.rtrack

Совместимость:

Apache 1.2 (частично), Apache 1.3

Приложение Б. Прочие директивы

245

Этой директивой определяется срок хранения файлов cookie. Этотмодуль распо знает следующие английские слова: years, months, weeks, hours, minutes и seconds. Если задается только число, то это подразумевает, что время задано в секундах.

Чтобы указать серверу Apache, что время хранения истекает через 1 неделю, 2 дня и 3 часа, необходи мо задать следующие директивы:

CookieExpires "l week 2 days 3 hours"

Б.36.2. Директива CookieName

Синтаксис:

CookieName символы

Умолчание:

Apache

Контекст:

конфигурация сервера, виртуальный узел, каталог, файл .htaccess

Перекрытие:

Optional

Статус:

Base

Модуль:

mod_usertrack

По умолчанию файл cookie, который этот модуль использует для отслеживания, называется Apache. Однако с помощью этой директивы его имя можно изменить.

Чтобы изменить имя файла cookie на httpd, примените следующую директиву:

CookieName httpd

Б.36.3. Директива CookieTracking

Синтаксис:

CookieTracking on \ off

Контекст:

конфигурация сервера, виртуальный узел, каталог, файл .htaccess

Перекрытие:

FileInfo

Статус:

optional

Модуль:

mod_usertrack

Эта директива используется для того, чтобы включить режим отслеживания cookie по серверному или каталожному принципу. Будучи активизированным, сервер Apache пошлет файлы cookie по всем новым запросам.

Пример

Чтобы включить отслеживание пользователей, необходимо прибегнуть к следующей директиве:

CookieTracking on

246

Часть IV. Приложения

 

Приложение

 

в

КОНЦЕПЦИЯ

ПРОТОКОЛА TCP/IP

В этом приложении...

 

В.1.Введение

247

B.2. IP адрес

247

B.3. Маска сети

248

B.4. IP порты

253

B.1. Введение

Аббревиатура TCP/IP раскрывается, как Transport Control Protocol/Internet Protocol (протокол управления передачей/протокол Internet), что, вероятно, говорит вам не о многом. На компьютерном жаргоне протоколом называется опубликованный набор стандартов, который используется для определения порядка и природы обмена дан ными по сети. Идея, которая была заложена при создании протокола, заключалась в том, чтобы предоставить программистам правила, которые, если им точно следовать, позволяют программам, написанным совершенно независимо (например броузер Internet Explorer и Apache Web сервер Apache), устанавливать сеанс связи, обмени ваться информацией, а затем отключаться друг от друга.

Технически протокол TCP/IP является не единым протоколом, а скорее, комплек сом отдельных протоколов. Часть протокола, которая обозначается TCP, занимается формированием отдельных блоков данных, которые называются пакетами, передает эти пакеты по сети, обеспечивая при этом их безопасную передачу. Часть IP отвечает за адресацию и маршрутизацию.

B.2. IP адрес

IP адрес представляет собой 32 битовое число, которое вместе с маской сети иден тифицирует положение узла в сети. IP адреса записываются в виде октетов, разделен ных точками:

1 4 5 . 1 8 6 . 4 7 . 5 0

Следует отметить, что этот формат рассчитан только на удобство восприятия чело веком. Компьютер работает непосредственно с 32 разрядным двоичным числом. Что бы IP адреса были читабель ными, на границах байтов ставится точка, и значения байтов транслируются в десятичные числа, как это показано на рис. В.1.

Приложение В. Концепция протокола TCP/IP

247

145.186.47.50

Рис. В. 1. Границы байтов

Плохо, что количество имеющихся в наличии IP адресов ограничено 32 битовой длиной. Для сравнения можно заметить, что 3 значное число может принимать толь ко 1000 возможных значений:

103 = 1 000,

где 10 — количество возможных значений, которые может принимать число, со стоящее из одной цифры, а 3 — количество разрядов в числе. Аналогично количество возможных IP адресов ограничено 2 (количество возможных значений числа, состоя щего из одной цифры в двоичной системе) в степени 32 (количество бит в IP адресе):

232 = 4 294 967 296

Несмотря на то, что цифра 4294967296 выглядит достаточно внушительно, в дейст вительности это не так уж и много. Плачевно, но факт, что побочным эффектом де ления IP адреса на классы (см. раздел "Классы" в этом приложении) является то, что в нашем распоряжении имеется значительно меньше, чем 4294967296 адресов. И очень вероятно, что скоро они будут исчерпаны. Существуют планы перевода стан дарта IP адресов с 32 на 128 бит, но в действительности, чтобы это сделать, необхо димо поднять всемирный переполох, аналогичный тому, что был поднят по поводу проблемы 2000 года1.

В.З. Маска сети

Вероятно, что наиболее сложным моментом обучения концепции TCP/IP является изучение концепции маскирования сети. Напомним, чторазделение 32 битового адре са на четыре однобайтовыхпоследовательности, является удобным для восприятия че ловеком. На практике граница может проходить в любом месте и совсем не обяза тельно по границе байтов.

1 Так получилось, что как и любой дееспособный программист в мире, я посвятил определенное время работе над проблемой 2000 года. Как вы, вероятно, еще помните, эта проблема была создана близорукими программистами времен холодной войны, не пожелавших отводить соответствующего пространства в своих переменных для хранения четырех цифр, представляющих год. Чтобы близору

кие программисты 90 хгодов могли обрабатывать такие данные, применяя алгоритмы вроде: if (2_digit_year >= 50) then

{

let century =19

}

else

{

let century =20

}

Конечно это будет отлично работать до 2049 года, начиная с которого любой такой устарев ший код, в котором исп ользуются такие, с позволения сказать "решения", должен быть отлов лен и перепрограммирован. Иногда закрадывается подозрение, что порочность человеческой натуры не позволит нам сделать этого.

248

Часть IV. Приложения

Сетевые биты являются частью IP адреса, определяющей сеть, в которой сущест вует данный узел.

Узловые биты являются частью IP адреса, определяющей номер узла в пределах подсети.

Место границы между сетевыми битами и узловыми битами задается сетевой маской. Чтобы понять принципы маскирования сети, необходимо знать, каким образом

октеты транслируются в соответствующие двоичные значения. Как видно из рис. В.2, в десятичной арифметике имеется знакоместо для единиц, десятков, сотен и т.д.

Рис. В. 2. Десятичные степени

Аналогично, в двоичной арифметике, есть знакоместо для 1, 2, 4, 8, ит.д., что от ражено на рис В.З.

Рис. В.З. Двоичные степени

Приложение В. Концепция протокола TCP/IP

249

В.3.1. Пример

Если вы когда нибудь работали кассиром, то должны знать, что способ подсчета сдачи заключается в выдаче купюр максимального достоинства (не превышающего причитающейся суммы сдачи).

Предположим, что мы должны вернуть покупателю 28 долларов сдачи. Очевидно, что вы не можете дать ему купюру достоинством в 100 или 50 долларов. Это будет значительно больше величины сдачи. Самая крупная купюра, которая не превышает долга — 20 долларов. Вот ее и можно отсчитать покупателю.

Сдача

Вычесть

Остаток

28 долларов

20 долларов

8 долларов

Теперь наш долг составляет 8 долларов. Дать покупателю еще 20 долларов нельзя, т.к. это будет слишком много, то же самое можно сказать и о купюре 10 долларов. Наибольшей купюрой, которая будет меньше оставшегося долга — это купюра в 5 долларов. Получим соответствующий остаток.

Сдача

Вычесть

Остаток

28 долларов

2 0 + 5 долларов

3 доллара

Дать еще 5 долларов, опять будет неразумно, т.к. это

слишком много. Теперь наи

большей купюрой, которая не превысит остаток сдачи, будет купюра в 1 доллар.

Сдача

Вычесть

Остаток

28 долларов

2 0 + 5 + 1 долларов

2 доллара

Можно покупателю дать еще 1 доллар? Да, 1 доллар все еще меньше 2 долларов,

которые сейчас у нас в остатке.

 

Сдача

Вычесть

Остаток

28 долларов

2 0 + 5 + 1 + 1

1 доллар

 

долларов

 

И снова наибольшим значением, которое меньше или равно остатку вашего долга все еще будет купюра достоинством в 1 доллар. Таким образом, выдаем третью купюру досто инством в 1 доллар. На этом процедуру выдачи сдачи можно считать законченной.

Сдача

Вычесть

Остаток

28 долларов

2 0 + 5 + 1 + 1 + 1

0 доллара

 

долларов

 

В.3.2. Преобразование десятичного представления числа в двоичное

Процесс перевода чисел из десятичного представления в двоичное во многом по добен процессу выдачи сдачи. В этом примере, 0 — это О, 1 — это 1, а "—" — это мар кер, показывающий, что мы еще не определили значение этой цифры. Поэтому сна чала у нас имеется в наличии восемь символов тире, по одному на каждый бит.

Предположим, что нам требуетсяопределить двоичное выражение для числа 137. Посмотрев на рис. В.З, скажем, что самый левый бит в байте будет составлять 128. Потому что 128 меньше 137, этим числом можно воспользоваться. Зададим 1 в самом левом бите.

Это соответствует 128 из числа 137, преобразуемого в двоичный формат.

250

Часть IV. Приложения

Десятичное число

Вычесть

Остаток

137.

128

9

Нельзя использовать 64, потому что это больше, чем 9, таким образом, поставим О на месте 64.

10

 

 

Десятичное число

Вычесть

Остаток

1 3 7

1 2 8 + 0

, 9

Нельзя воспользоваться 32 и 16 (в соответствии с рис. В.З — это следующие две позиции) так как они все еще больше, чем значение 9, которое у нас в остатке. По этому на месте 32 и 16 в этих местах поставим 0 для того, чтобы показать, что эти биты не используются.

1000

 

 

Десятичное число

Вычесть

Остаток

137

128 + 0 + 0 + 0

9

Теперь настала очередь места 8, и действительно 8 меньше, чем 9, которая у нас по прежнему в остатке. Таким образом, на месте 8 можно задать 1, для того, чтобы показать, что этот бит используется.

10001

 

 

Десятичное число

Вычесть

Остаток

137

128 + 0 + 0 + 0 + 8

1

Оставшаяся часть решения очевидна, но мы пройдем процедуру получения реше ния до конца. Следующим разрядом, меньше, чем 8, будет 4. Так как 4 больше 1, то этот бит использоваться не будет. Ставим 0.

100010

 

 

Десятичное число

Вычесть

Остаток

137

128 + 0 + 0 + 0 + 8 + 0

1

Следующим разрядом является разряд 2 и он также больше 1. И в этом разряде

поставим 0.

 

 

 

1000100$

 

 

 

Десятичное число

Вычесть

Остаток

137

128

+ 0 + 0 + 0 + 8 +

1

 

0 +

0

 

В конце концов мы пришли к логическому финалу нашей процедуры. Рассмотрим, наконец, бит 1. Значение 1 равно 1, которое у нас все еще в остатке. Итак, ставим в последнем разряде 1 и завершаем наши упражнения.

10001001

 

 

Десятичное число

Вычесть

Остаток

137

128 + 0 + 0 + 0 + 8 +

О

 

0 + 0 + 1

 

Приложение В. Концепция протокола TCP/IP

251