Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!diplom_Lazutin.doc
Скачиваний:
4
Добавлен:
27.10.2018
Размер:
672.77 Кб
Скачать

2.2.5 Обновление web-сервера Apache

Первым шагом при обновлении является чтение информации о релизе и файла CHANGES, находящегося в дереве исходных кодов - это поможет понять, каким образом обновление повлияет на ваш текущий web-сервер. При переходе между разными ветками сервера (например, с 1.3 на 2.0, или с 2.0 на 2.2), появляются существенные нововведения в конфигурировании процесса сборки или работы сервера, которые потребуют анализа и ручной настройки. Все модули также необходимо будет обновить, для того чтобы они могли соответствовать изменениям.

Обновление, осуществляемое внутри одной ветки сервера (например, с 2.0.55 на 2.0.57) существенно проще. Выполнение команды make install не перезапишет никакие существующие документы, файлы логов или конфигурационные файлы. В дополнение к этому, разработчики сервера сделали всё возможное, чтобы избежать несовместимости в опциях скрипта configure, рабочей конфигурации сервера и API модулей для разных младших релизов внутри одной ветки. В большинстве случаев можно использовать идентичную строку запуска скрипта configure, тот же самый конфигурационный файл и быть уверенным, что все модули продолжат работать. (Это верно только для версий сервера, начиная с 2.0.41; предыдущие версии имеют несовместимые изменения.)

Для обновления с одного младшего релиза на другой, следует найти файл config.nice, который должен находиться либо в каталоге build сервера, либо в корне дерева исходных кодов рабочего сервера. Этот файл содержит в себе точную копию строки запуска скрипта configure, которая использовалась при конфигурировании дерева исходных кодов установленной версии сервера. Затем, чтобы осуществить обновление, нужно скопировать файл config.nice в дерево исходных кодов новой версии сервера, внесите в него все необходимые изменения, а затем выполнить следующие команды:

./config.nice make make install

После обновления следует протестировать сервер, сделав пробный его запуск и остановку.

2.3 Конфигурирование web-сервера Apache

2.3.1 Основные настройки web-сервера Apache

Настройка сервера осуществляется с помощью текстового файла httpd.conf, состоящего из директив. Имя файла можно изменить при запуске сервера ключом "-f". Директива Include позволяет вставлять содержимое дополнительных файлов (можно указывать шаблон имени или имя каталога). Для вступления в действие изменений файла настройки необходимо перезапустить сервер. Некоторые директивы могут ссылаться на дополнительные файлы с другим синтаксисом. Каждая директива располагается на отдельной строке. Продолжение на следующую строку делается с помощью символа '\' в конце строки. Комментарии начинаются с символа '#'. Пробелы в начале строки игнорируются.

Сервер состоит из множества модулей, которые могут выбираться при сборке или загружаться динамически. Модуль Core отключить нельзя. Каждая директива определяет поведение одного из модулей и имеет смысл только, если этот модуль включен при сборке или с помощью динамической загрузки. Директивы могут выполняться в зависимости от наличия модуля (секция IfModule) или установки параметра при запуске сервера (секция IfDefine).

Секция IfDefine включает директивы, применяемые только если при запуске сервера была установлена (не установлена) соответствующая переменная (ключ -D):

<IfDefine [!]имя-переменной>

...

</IfDefine>

Секция IfModule включает директивы, применяемые только при наличии (отсутствии) указанного модуля:

<IfModule [!]имя-модуля>

...

</IfModule>

Директивы могут иметь следующие области действия (секции могут быть вложенными, каждая директива имеет набор допустимых контекстов - буквы SVDFLA указываются при описании директив):

  • весь сервер (S)

  • секция VirtualHost (V)

  • секции Directory и DirectoryMatch (D)

  • секции Files и FilesMatch (F)

  • секции Location и LocationMatch (L)

  • дополнительный файл настройки размещается в составляющем содержимое сайта каталоге, директивы из него действуют на этот каталог и его подкаталоги (A)

Дополнительные файлы настройки читаются при каждом запросе из каталога и его надкаталогов (сверху вниз, следующий имеет больший приоритет). Обычно имеют имя файла ".htaccess". Директива AccessFileName (SV) позволяет задать другое имя файла или имена (через пробел).

Директива AllowOverride (D, кроме DirectoryMatch) позволяет определить типы директив, допустимых в дополнительном файле настройки (директива также должна быть вообще допустима в контексте A):

  • All (по умолчанию)

  • None (дополнительные файлы даже не читаются, что сильно ускоряет работу сервера)

  • тип [ тип ... ]

    • AuthConfig (директивы авторизации)

    • FileInfo (директивы, управляющие типом обработки)

    • Indexes (директивы автоматического построения индексов каталогов)

    • Limit (Allow, Deny и Order)

    • Options (Options и XBitHack)

Секция VirtualHost (S) включает директивы, применяемые для запросов к указанному хосту ("*" означает любой адрес или любой порт; "_default_" - адреса, не указанные в других секциях):

<VirtualHost имя-или-адрес[:порт] [ имя-или-адрес[:порт] ...]>

...

</VirtualHost>

Секция Directory (SV) включает директивы, применяемые только к запросам файлов из указанного в заголовке секции каталога и его подкаталогов (вместо полного имени каталога можно указывать шаблон в стиле Unix или регулярное выражение в кавычках, перед которым необходимо указать "~ "), нельзя вкладывать в секции Directory и Limit:

<Directory имя-каталога>

...

</Directory>

Секция DirectoryMatch (SV) включает директивы, применяемые только к запросам файлов из указанного в заголовке секции каталога и его подкаталогов, нельзя вкладывать в секции Directory и Limit:

<DirectoryMatch регулярное-выражение>

...

</Directory>

Секция Files (SVDA) включает директивы, применяемые только к запросам файлов с указанным в заголовке секции простым именем (вместо простого имени можно указывать шаблон в стиле Unix или регулярное выражение в кавычках, перед которым необходимо указать "~ "):

<Files простое-имя-файла>

...

</Files>

Секция FilesMatch (SVDA) включает директивы, применяемые только к запросам указанного в заголовке секции файла:

<FilesMatch регулярное-выражение>

...

</FilesMatch>

Секция Location (SV) включает директивы, применяемые только к запросам URL, указанным в заголовке секции (для локальных - не прокси - запросов нельзя указывать схему, имя хоста, номер порта и строку запроса; можно указывать шаблон в стиле Unix)

<Location начальная-часть-URL>

...

</Location>

Секция LocationMatch (SV) включает директивы, применяемые только к запросам URL, указанным в заголовке секции:

<LocationMatch регулярное-выражение>

...

</LocationMatch>

Секция Limit (SVDFLA) включает директивы управления доступом, применяемые только к запросам указанного в заголовке секции HTTP методам доступа (GET (действует также на HEAD), POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK; TRACE указывать нельзя):

<Limit метод [ метод ...]>

...

</Limit>

Секция LimitExcept (SVDFLA) включает директивы управления доступом, применяемые к запросам не указанных в заголовке секции HTTP методов доступа:

<LimitExcept метод [ метод ...]>

...

</LimitExcept>

Порядок применения директив определения свойств и прав доступа к объекту (все секции одного типа, кроме Directory и .htaccess, применются по порядку; Directory и .htaccess применяются от кратчайшего пути к самому длинному; секции внутри VirtualHost применяются после соответствующих общих секций):

  1. секция Directory (кроме регулярных выражений) и .htaccess (.htaccess перебивает Directory, если разрешено директивой AllowOverride)

  2. секция DirectoryMatch и Directory с регулярными выражениями

  3. секции Files и FilesMatch

  4. секции Location и LocationMatch

Журнал ошибок управляется директивами ErrorLog и LogLevel модуля Core. Кроме сообщений сервера сюда направляется вывод на stderr скриптов CGI, вывод модуля dumpio.

Журнал доступа управляется модулем log_config, который позволяет задать имя файла и формат вывода. Данный журнал содержит записи о всех (если не отфильтровано директивой CustomLog) запросах к серверу. Каждый виртуальный сервер может вести произвольное число журналов в различных форматах.

Каждый запрос к серверу порождает строку в журнале, состоящую из элементов (token), разделенных пробелами. Пустой элемент записывается как символ '-'. Если элемент содержит пробелы, то он должен заключаться в кавычки (это надо самому предусмотреть при описании формата). При описании формата используются литеральные символы, которые копируются в журнал (можно использовать '\n' и т.п.; кавычки и обратная косая должны быть прикрыты символом '\') и директивы, которые начинаются с символа '%' и завершаются однобуквенным именем директивы. Между ними может стоять условие в виде списка кодов завершения HTTP через запятую (м.б. предваренных восклицательным знаком для операции отрицания) - если условие не выполняется, то вместо элемента записывается минус. Модификаторы перед буквой директивы позволяют определить (в случае внутреннего перенаправления) атрибут исходного ('<') или результирующего ('>') запроса будет использоваться при создании строки журнала.

Директива в описании формата замещается соответствующим значением:

  • %% - '%'

  • %a - адрес удаленного хоста

  • %A - локальный адрес

  • %B - количество посланных байт, кроме HTTP-заголовка

  • %b - количество посланных байт, кроме HTTP-заголовка (вместо 0 пишется '-')

  • %{имя-куки}C - значение куки

  • %D - микросекунд потрачено на обработку запроса

  • %{имя}e - значение переменной окружения

  • %f - имя файла

  • %h - имя удаленного хоста

  • %H - протокол (HTTP)

  • %{имя-заголовка}i - значение заголовка запроса; наиболее часто используются

    • Referer - откуда была ссылка на документ

    • User-agent - что сказал о себе броузер

  • %I - количество полученных байт, включая заголовки (требуется logio)

  • %l - имя удаленного пользователя (если задействован ident)

  • %m - метод (GET, PUT и т.д.)

  • %{имя-заметки}n - содержимое заметки с указанным именем, созданной другим модулем (например, %{forensic-id}n или %{cookie}n)

  • %{имя-заголовка}o - значение заголовка ответа

  • %O - количество посланных байт, включая заголовки (требуется logio)

  • %p - канонический номер порта сервера

  • %P - pid процесса, обслуживающего запрос

  • %{tid}P - идентификатор потока, обслуживающего запрос

  • %q - поисковая часть URL (после '?')

  • %r - первая строка запроса

  • %s - статус запроса (код возврата HTTP)

  • %t - время в CLF-формате ([day2d/month3l/year4d:hour2l:minute2l:second2l zone], где zone в формате [+|-]hour2dmin2d)

  • %{формат}t - время, формат описан в strftime(3)

  • %T - секунд, прошедших до окончания обслуживания запроса

  • %u - имя авторизованного пользователя (если статус не равен 401)

  • %U - запрошенный URL без поисковой части

  • %v - канонический ServerName

  • %V - имя сервера в соответствии с значением UseCanonicalName

  • %X - состояние соединения к моменту завершения ответа ('X' - преждевременный обрыв, '+' - можно использовать повторно, '-' - необходимо закрыть после завершения обработки запроса)

Директивы модуля log_config рекомендуется использовать только LogFormat для определения формата и CustomLog для создания журнала:

  • SV CookieLog имя-файла (только для совместимости со старым модулем mod_cookie; рекомендуется использовать mod_usertrack и CustomLog)

  • SV CustomLog имя-файла-или-канала формат-или-имя-формата[env=[!]имя-переменной] (вести журнал определенного формата в указанном файле или подать на вход программе; канал записывается как символ "|", за которым идет имя запускаемой программы; журнал подается на стандартный ввод программы, которая запускается с теми же правами, что и httpd (root); формат определяется директивой LogFormat; env= позволяет заносить в журнал записи только о тех запросах, которые удовлетворяют условию)

  • SV LogFormat формат-или-имя-формата [имя-формата] (определить формат с указанным именем; по умолчанию - "%h %l %u %t \"%r\" %>s %b" - так называемый Common Log Format (CLF))

  • SV TransferLog имя-файла-или-канала (аналогично CustomLog, но формат определяется в предыдущей LogFormat без имени)

Содержимое файла настроек моего сервера (/conf/httpd.conf) представлено в Приложении 1.