История AOLserver интересна: от коммерческой версии в 1995 году до одного из самых полнофункциональных бесплатных серверов, доступных в настоящее время.
AOLserver появился с именем NaviPress и был одним из первых доступных коммерческих серверов. В конце 1995 года AOL приобрела, компанию, выпустившую NaviPress, и использовала сервер внутри фирмы. В начале 1997 года AOL начала бесплатно распространять сервер по сети Internet.
Во время написания книги последняя версия AOLserver 3.4 поддерживала следующие функции.
Встроенное полное индексирование текста для выполнения функций поиска на Web-сайте.
Встроенный API, доступный из С и языка сценариев Tel.
Полная поддержка CGI и включений со стороны сервера.
Возможность динамического выделения страниц со стороны сервера подобно Active Server Pages фирмы Microsoft.
Связь с базами данных для построения динамических приложений, управляемых базами данных, без использования дополнительных средств интеграции Web и баз данных.
AOLserver можно загрузить с Web-сайта AOLserver по адресу www. aolserver. com/ server/ index.html.
По некоторым подсчетам Apache является наиболее широко используемым программным обеспечением Web-серверов. Apache означает "A Patchy Server", т.е. "Сервер с заплатами". Этот Web-сервер возник из попыток залатать NCSA httpd, один из первоначальных Web-серверов, чтобы исправить некоторые ошибки и добавить больше функций.
В результате появился Apache как некоммерческая альтернатива для систем Unix. Недавно он был перенесен в Windows и может использоваться как Web-сервер на системах с Windows NT/2000.
Apache предлагает многочисленные возможности, которые делают его привлекательным для системных администраторов Unix. Помимо использования конфигурации, основанной на первоначальных конфигурационных файлах NCSA httpd, для Apache доступен исходный код программы. Он разрабатывается коллективно, как и многие другие приложения для среды Linux.
Apache предлагает собственный API, являющийся альтернативой CGI (который тоже поддерживается в Apache). Можно использовать API при создании сменных (plug-in) модулей для решения множества задач. Из доступных модулей хотелось бы выделить следующие.
Альтернативные системы аутентификации, включая аутентификацию через серверы NIS или базы данных LDAP (Lightweight Directory Access Protocol - Протокол облегченного доступа к каталогам).
Конфигурации сценариев со стороны сервера, которые выполняют те же функции, что и Microsoft Active Server Pages или Netscape Live Wire, включая PHP/FI и HeiTML.
Модули, разработанные для улучшения производительности традиционного CGI. Например, модуль FastCGI использует ярлыки для минимизации времени, затрачиваемого на выполнение программы CGI и возвращение результатов. Модуль Perl позволяет нескольким сценариям Perl выполняться в одном процессе, их компиляция осуществляется только при первом запуске. В результате написанные на Perl сценарии CGI выполняются со скоростью, близкой к скорости выполнения откомпилированных CGI-программ и некоторых Web-приложений, использующих API.
Оригинал исходного кода последней версии Apache, включая откомпилированные выполняемые модули для многих различных систем, в том числе и Linux, доступен на www. apache. org. В Red Hat Linux 7.1 Apache является Web-сервером по умолчанию.
Boa - последний бесплатный сервер в нашем обзоре. Он малоизвестен, во время работы над книгой была выпущена его первая предварительная версия.
Здесь Boa описан как пример того, что хотя сервер может быть небольшим, простым и даже элементарным, он может выполнять нужную работу. Boa предоставляет только базовую функциональность и имеет меньше возможностей по управлению доступом, чем Apache или WN.
Boa разработан так, что вполне может претендовать на звание самого быстрого из доступных Web-серверов для Linux. Создатели Boa утверждают, что их сервер в два раза быстрее Apache, хотя для доказательства этого заявления требуется дополнительное тестирование на реальных больших Web-сайтах.
Такого выигрыша в производительности Boa достигает за счет однозадачного режима выполнения. Обычные Web-серверы создают несколько процессов для прослушивания запросов, а Boa работает в одном процессе и обрабатывает все приходящие запросы внутри, не используя многозадачный механизм операционной системы. Boa порождает дочерний процесс только при CGI-запросе.
Дополнительная информация о Boa доступна по адресу www. boa. org.
Описанная последовательность действий чрезмерно упрощена, но ее цель - описать работу, выполняемую многими Web-серверами.
Конечно же, путешествуя по Web, легко осознать, что Web - это гораздо больше, чем набор статических документов, которые Web-сервер посылает на запросы Web-браузеров. Для запроса информации с сервера или предоставления информации организации-владельцу сервера могут использоваться формы. Можно заказать товары, проверить кредитные карточки и выполнить другие самые разнообразные деловые операции.
Для выполнения таких функций современные Web-серверы должны не только отвечать на HTTP-запросы. Web-серверы обычно обеспечивают два механизма взаимодействий.
Интерфейс простого шлюза (CGI, Common Gateway Interface).
Программный интерфейс приложений сервера (APIs, Application Program Interfaces).
Интерфейс простого шлюза (CGI - Common Gateway Interface)
Для придания интерактивности Web-серверу наиболее широко применяется механизм CGI. При использовании CGI к HTTP-протоколу добавляется очень простое расширение для запроса статических файлов.
CGI обеспечивает стандартизованный метод запуска программы на сервере и передачи программе данных из формы на обработку. Эти программы можно писать практически на любом языке программирования или сценариев. Обычно используются С, Perl и Java.
Когда пользователь запрашивает CGI-программу (возможно, при предоставлении заполненной формы или щелчке на ссылке к программе) Web-сервер передает данные пользователя CGI-программе и ожидает, пока программа вернет результат. Данные, возвращенные CGI-npor-раммой, сразу же передаются клиенту тем же образом, каким возвращается браузеру содержимое статического файла. Правильное формирование данных, возвращаемых браузеру, и обработка непредвиденных обстоятельств входит в задачу CGI-программы.
В целом, технология CGI разработана достаточно хорошо. Простота метода передачи данных от сервера в CGI-программу и способ построения результирующих данных, которые программа возвращает серверу, означает, что можно создавать несложные CGI-программы, не имея большого опыта программирования.
Пользователи, которые когда-либо использовали Web, вероятнее всего, слышали термин "Web-сервер", но все же они не имеют четкого представления о том, для чего нужен Web-сервер.
Очень часто этот термин имеет двойное значение, обозначая и компьютерное оборудование, и программное обеспечение, выполняемое на компьютере. Корректно использовать термин "Web-сервер" для обозначения программного обеспечения, запускаемого для ответа на запросы Web-клиентов, например Web-браузеров.
Программное обеспечение Web-сервера предназначено для отображения документов, использующих HTTP (Hypertext Transfer Protocol - Протокол передачи гипертекста) и доступных на Web-сайте в ответ на запросы клиентов. Web-сайт использует программное обеспечение Web-сервера.
Последовательность действий следующая: клиент запрашивает документ при помощи URL; Web-сервер принимает запрос, находит в системе URL, соответствующий заданному, - физический файл (который может быть файлом HTML или файлом другого типа). Убедившись, что клиент
имеет разрешение на получение файла, Web-сервер возвращает файл клиенту. Кроме того, обычно Web-сервер ведет запись протокола: кто и какой документ запрашивал, и сколько было запросов, что позволяет получить статистику для определения популярности Web-сайта.
FastTrack - известный Web-сервер от Netscape. К сожалению, фирма Netscape не интересовалась разработкой Web-серверов для некоммерческих операционных систем (таких как Linux) до того, как было принято решение выпустить в свободное распространение браузер и исходные тексты к нему.
С появлением альянса между AOL/Netscape и Sun интерес к FastTrack оживился. Теперь он входит в семейство iPlanet Web-серверов и серверов приложений. FastTrack сейчас реализован с помощью свободно-распространяемой Java-версии Web-сервера iPlanet. Enterprise-версия этого сервера распространяется как коммерческий продукт.
Управлять Web-сервером FastTrack очень просто. Все действия по конфигурированию и администрированию выполняются через Web-формы. Эти формы позволяют Web-мастеру производить все операции: от создания списков пользователей до управления доступом к файлам на уровне каталогов.
FastTrack имеет поддержку включений со стороны сервера, CGI и собственный API Netscape пя разработки приложений. Он поддерживает Live Wire фирмы Netscape, среду разработки для JavaScript со стороны сервера.
Сервер также можно использовать как безопасный сервер по технологии SSL. Для получения более подробной информации о нем обращайтесь по адресу http: / /home. netscape. com/ fasttrack/v3.0/index.html.
Java Web Server отдела JavaSoft фирмы Sun - уникальный Web-сервер. Несмотря на то, что Java Web Server не разрабатывался специально под Linux, теоретически он может работать на любой платформе с Виртуальной Машиной Java (Java Virtual Machine), так как полностью разработан на Java.
Java Web Server предлагает многочисленные функции, выделяющие его среди коммерческих предложений, включая систему серверных аплетов для написания приложений без необходимости возврата к CGI, полную поддержку SSL, что позволяет использовать сервер безопасными приложениями, например интерактивными магазинами.
Для улучшения производительности можно создать компилированные страницы, состоящие как из HTML, так и из программного кода. Для сбора статистической информации в программах можно регистрировать сессии пользователей при помощи встроенного механизма регистрации.
К сожалению, с расширением соглашения между AOL/Netscape и Sun возникает необходимость поддержки трех Web-серверов. К моменту написания книги было принято решение о прекращении развития этого продукта в начале 2001 года. Однако, это по прежнему популярный коммерческий Web-сервер. Если вам необходимы услуги в области администрирования или поддержки Java Web Server, можно обратиться к его домашней странице по адресу http: / /www. sun. com/ software/ jwebserver/ index. html.
Хотя подкаталог /etc/httpd/conf включает все три оригинальных конфигурационных файла, собственно конфигурируется только файл httpd. conf. Остальные CONF-файлы оставлены для совместимости с предыдущими версиями.
Структура файла httpd. conf довольно проста. Ниже приведен его листинг по умолчанию:
##
## httpd.conf - конфигурационный файл HTTP-сервера Apache
##
#
# Построил Rob McCool на основе конфигурационных файлов NCSA-сервера. #
# Это основной конфигурационный файл сервера. QH содержит
# конфигурационные директивы для сервера. За дополнительными
# инструкциями обращайтесь по адресу <URL:
http://www.apache.org/docs/
> #
# Если не понятно, о чем речь - лучше не читать. Если в чем-то
# не уверены - обращайтесь к документации в on-line. Вас предупредили. #
# После обработки этого файла, сервер ищет и обрабатывает файлы
# /usr/conf/srm.conf и /usr/conf/access.conf, если вы не заблокировали
# их здесь директивами ResourceConfig и/или AccessConfig.#
# Директивы конфигурирования разбиты на три раздела:
# 1. Директивы, управляющие работой сервера Apache в целом
# (раздел 'global environment') .
# 2. Директивы, определяющие параметры 'сервера 'main' или 'default',
# соответствующие запросам, не обрабатываемы виртуальным хостом.
# Эти директивы также обеспечивают значения по умолчанию для всех
# виртуальных хостов.
# 3. Установки для виртуальных хостов, позволяющие отправлять
# Web-запросы на другие IP-адреса или хосты в расчете на обработку # аналогичным Apache-сервером.
#
# Имена файлов конфигурации и протокола: Если заданные имена файлов
# управления сервером начинаются с "/" (или "drive:/ " для Win32),
# сервер будет использовать явный путь. Если имена не начинаются
# с "/", значение ServerRoot интерпретируется так: "logs/foo.log"
# для ServerRoot, установленного на "/usr/local/apache" будет
# интерпретироваться сервером как "/usr/local/apache/logs/foo.log".
# После этого дочерний процесс будет завершен, чтобы избежать |
||
# неприятностей связанных с продолжительным использованием из-за |
||
# изъянов Apache (а может и используемых им библиотек) . На многих |
||
# системах этот параметр не очень нужен, но некоторые (такие как |
||
# Solaris) действительно имеют изъяны в библиотеках. Для таких систем |
||
# задайте значение, наподобие 10000; |
||
# значение 0 означает "неограниченный". # |
||
# Внимание: Это значение не включает keepalive-запросы после .соединения. |
||
# Например, если дочерний процесс обрабатывает начальный запрос и 10 |
||
# последующих keptalive-запросов, будет учтен только один запрос |
||
# при анализе превышения данного предела . |
||
# |
||
MaxRequestsPerChild 100 |
||
# |
||
# Listen: Позволяет привязать Apache к конкретным IP-адресам |
||
# и/или портам, в дополнение к принятым по умолчанию значениям. |
||
# См. также команду VirtualHost. |
||
# |
||
#Listen 3000 |
||
#Listen 12.34.56.78:80 |
||
Listen 80 |
||
# |
||
# BindAddress: Эту сйщию можно использовать для поддержки виртуальных |
||
# хостов. Эта опция указывает серверу IP-адрес для прослушивания. Он |
||
# может содержать либо "*", либо IP-адрес, либо полное квалифицированное |
||
# имя Internet-домена. См. также команду VirtualHost. |
||
# |
||
# BindAddress * |
||
# Поддержка Dynamic Shared Object (DSO - Динамические |
||
# совместные объекты) |
||
# |
||
# Чтобы использовать функциональность модулей, построенных как DSO, |
||
# поместите соответствующие строчки 'LoadModule' в этом месте, чтобы |
||
# содержащиеся в них команды были доступны до того, как они будут |
||
# использованы. Для дополнительной информации о механизме DSO, |
||
# пожалуйста, прочтите файл README. DSO из дистрибутива Apache Д. 3 и |
||
# запустите 'httpd -1' для получения списка уже встроенных модулей |
||
# (они Скомпонованы статически и, таким образом, всегда доступны) |
||
# в исполняемом модуле httpd. |
||
# # Внимание : Порядок загрузки модулей существенен. Не меняйте |
||
# приведенный ниже порядок без консультации со специалистом. |
||
# Пример : |
||
# LoadModule foo_module libexec/mod_foo.so |
||
# |
||
# LoadModule imiap_static_module modules /mod_mmap_static. so |
||
LoadModule vhost_alias_module modules/mod_vhost_alias.so |
||
LoadModule env_module modules /mod_env. so |
||
LoadModule conf ig_log_module modules /mod_log_config. so |
||
LoadModule agent_log_module modules /mod_log_agent .so |
||
LoadModule referer_log_module modules /mod_log_referer .so |
||
#LoadModule mime_magic_module modules /mod_mime_magic .so |
||
LoadModule mime_module modules /mod_mime. so |
||
LoadModule negotiation_module modules /mod_negotiation. so |
||
LoadModule status_module modules /mod_status. so |
||
LoadModule info_module modules /mod_info. so |
||
LoadModule includes_module modules/mod_include.so |
||
LoadModule autoindex_module modules/mod_autoindex.so |
||
LoadModule dir_module modules /mod_dir .so |
||
LoadModule cgi_module modules /mod_cgi .so |
||
LoadModule asis_module modules/mod_asis . so |
||
LoadModule imap_module modules /mod_imap. so |
||
LoadModule action_module modules /mod_actions . so |
||
tLoadModule speling_module modules /mod_speling. so |
||
LoadModule userdir_module modules /mod_userdir. so |
||
LoadModule alias_module modules/mod_alias .so |
||
LoadModule rewrite_module modules /mod_rewrite. so |
||
LoadModule access_module modules /mocLaccess. so |
||
LuaJWuUule auUuuuQule modules/mod_auth.so |
||
LoadModule anon_auth_module modules /mocLauth_anon. so |
||
LoadModule db_auth_module modules /mod_auth_db. so |
||
#LoadModule digest module modules /mod_dige'st. so |
||
#LoadModule proxy_module modules /libproxy. so |
||
#LoadModule cern_meta_moduie modules /mod cern_meta.so |
||
LoadModule expires_module modules /mod_expires. so |
||
LoadModule headers_module modules/mod_headers.so |
||
#LoadModule usertrack_module modules /mod_user track. so |
||
#LoadMnHn1e example_modul modules /mod_example. so |
||
#LoadModule unique_id_module modules /mod_unique_id. so |
||
LoadModule setenvif_module moauies/mod_secenvit.so |
||
#LoadModule bandwidth_module modules /mod_bandwidth . so |
||
ILoadModule put_module modules/mod_put.so |
||
<If Define HAVE_PERL> |
||
LoadModule perl_module modules /libperl .so |
||
</lfDefine> |
||
<If Define HAVE_PHP> |
||
LoadModule php_module modules /mod_php. so |
||
</IfDefine> |
||
<IfDefine HAVE_PHP3> |
||
LoadModule php3_module modules /libphpS . so |
||
</IfDefine> |
||
<IfDefine HAVE_PHP4> |
||
LoadModule php4_module modules/ Iibphp4. so |
||
</IfDefine> |
||
<IfDefine HAVE_DAV> |
||
LoadModule dav_module modules /libdav. so |
||
</IfDefine> |
||
<If Define HAVE_ROAMING> |
||
LoadModule roaming_module modules /mod_roaming. so |
||
</IfDefine> |
||
<IfDefine HAVE_SSL> |
||
LoadModule ssl_module modules/libssl .so |
||
</IfDef ine> |
||
# Реконструкция полного списка модулей из всех доступных модулей |
||
# (статических и совместных) для обеспечения правильного порядка |
||
# выполнения модулей. |
||
# [ВСЯКИЙ РАЗ ПОСЛЕ ПОПРАВОК В СЕКЦИИ LOADMODULE (см. выше) |
||
# ТАКЖЕ ОТКОРРЕКТИРУЙТЕ И ЭТУ СЕКЦИЮ] |
||
ClearModuleList |
||
#AddModule mod_mmap_static.c |
||
AddModule mod_vhost_alias.c |
||
AddModule mod__env.с |
||
AddModule mod_log_conf ig.c |
||
AddModule mod_log_agent.c |
||
AddModule mod_log_referer.c |
||
#AddModule mod_mime_magic . с |
||
AddModule mod_mime . с |
||
AddModule mod_negotiation.c |
||
AddModule mod_status.c |
||
AddModule mod_info.c |
||
AddModule mod_include.c |
||
AddModule mod_auto index . с |
||
AddModule mod_dir.c |
||
AddModule mod_cgi.c |
||
AddModule mod_asis.c |
||
AddModule mod_imap.c |
||
AddModule mod_actions.c |
||
#AddModule mod_spel ing . с |
||
AddModule mod_userdir . с |
||
AddModule mod_alias.c |
||
AddModule mod_rewrite .c |
||
AddModule mod_access . с |
||
AddModule mod_auth.c |
||
AddModule mod_auth_anon . с |
||
AddModule mod_auth_db . с |
||
#AddModule mod_digest.c |
||
#AddModule mod_proxy.c |
||
#AddModule mod_cern_meta . с |
||
AddModule mod_expires . с |
||
AddModule mod_headers . с |
||
#AddModule mocLuser track _e |
||
#AddModule mod_example.c |
||
#AddModule mod_unique_id . с |
||
AddModule mod_so.c |
||
AddModule mod_setenvif .c |
||
#AddModule mod__bandwidth . с |
||
#AddModule mod_put.c |
||
< If Define HAVE_PERL> |
||
AddModule mod_perl.с |
||
</IfDefine> |
||
<IfDefine HAVE_PHP> |
||
AddModule mod_php.c |
||
</IfDefine> |
||
<IfDefine HAVE_PHP3> |
||
AddModule mod_php3 . с |
||
</IfDef ine> |
||
<If Define HAVE_PHP4> |
||
AddModule mod_php4.c |
||
</IfDefine> |
||
<If Define HAVE_DAV> |
||
AddModule mod_dav . с |
||
</IfDefine> |
||
<IfDefine HAVE_ROAMING> |
||
AddModule mod_roaming . с |
||
</IfDef ine> |
||
<IfDefine HAVE_SSL> |
||
AddModule mod_ssl . с |
||
</IfDef ine> |
||
# ExtendedStatus : определяет, будет ли Apache генерировать |
||
# информацию о состоянии в полном объеме (ExtendedStatus On) |
||
# или только базисную информацию (ExtendedStatus Off) , |
||
# когда вызывается обработчик "server-status". По умолчанию |
||
# используется значение Off. |
||
# |
||
#ExtendedStatus On |
||
# |
||
### Раздел 2: 'Main' конфигурация сервера |
||
# |
||
# Директивы этого раздела устанавливают значения, используемые |
||
# 'main' сервером, который отвечает на любой запрос, не |
||
# обработанный хостом <VirtualHost>. |
||
# Эти значения также задают величины по умолчанию для любых |
||
# контейнеров <VirtualHost>, которые вы можете |
||
# определить позже. |
||
# |
||
# Все эти директивы могут возникать внутри контейнеров |
||
# <VirtualHost>. В этом случае значения по умолчанию будут |
||
# заменены этими величинами для виртуальных хостов. |
||
# |
||
# |
||
# Если ваша директива ServerType (см. выше в разделе |
||
# 'Global Environment') устанавливает значение "inetd", |
||
# следующие несколько директив не оказывают никакого эффекта, |
||
# поскольку их значения определены inetd-конфигурацией. |
||
# |
||
# Переходите к директиве ServerAdmin. |
||
# |
||
# Port: порт, который прослушивает сервер в режиме standalone. |
||
# Если номер порта < 1023, то при загрузке httpd нужно запускать с |
||
# привилегиями root . |
||
# Port 80 |
||
# Чтобы запустить httpd как другого пользователя или группу |
||
# пользователей, необходимо вначале запустить httpd как root, a |
||
# он затем сам выполнит переключение. |
||
# |
||
# User/Group: Имя (или #номер) пользователя/группы, под которым |
||
# запустить httpd. |
||
# На SCO (ОПТ 3) используйте User nouser и Group nogroup |
||
# Если на HPUX указать nobody, то нельзя будет использовать |
||
# разделяемую память и выходом из положения может быть |
||
# создание пользователя www и его использование. |
||
# |
||
# ПРИМЕЧАНИЕ : в некоторых системах ядро отвергает запросы на |
||
# Здесь допустимы также значения "None", "All" и любые комбинации |
||
# "Indexes", "Includes", "FollowSymLinks", "ExecCGI" и "MultiViews". |
||
# Заметьте: "MultiViews" должно быть указано *явно* - "Options All" |
||
# не устанавливает эту опцию. |
||
Options Indexes Includes FollowSymLinks |
||
# |
||
# Здесь указывается, какие опции могут переопределить файлы .htaccess, |
||
# находящиеся в каталогах. Значение может быть "All" или любой |
||
# комбинацией "Options", "Filelnfo", "AuthConfig" и "Limit". |
||
AllowOverride None |
||
# Указывает, кто может брать файлы на этом сервере |
||
Order a How, deny |
||
Allow from all |
||
</Directory> |
||
# |
||
# UserDir: Имя каталога, которое добавляется к домашнему каталогу |
||
# пользователя, если получен запрос типа ~user. |
||
# |
||
UserDir public_html |
||
# |
||
# Управление доступом к каталогам UserDir. Ниже приведен пример |
||
# для узла, на котором каталоги объявлены доступными только для чтения. |
||
# |
||
#<Directory /home/*/public_html> |
||
# AllowOverride Filelnfo AuthConfig Limit |
||
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec |
||
# <Limit GET POST OPTIONS PROPFIND> |
||
# Order allow, deny |
||
# Allow from all |
||
# </Limit> |
||
# <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> |
||
# Order" deny, allow |
||
# Deny from all |
||
# </Limit> |
||
#< /Directory> |
||
# |
||
# Directorylndex: Имя или имена файлов, которые будут использоваться как |
||
# индексные файлы HTML. Разделяйте имена пробелами, если их несколько. |
||
# |
||
Directorylndex index.html index.htm index. shtml index. php index. php4 |
||
-> index . php3 index . cgi |
||
# |
||
# AccessFileName: Имя файла, который нужно искать в каждом каталоге |
||
# и который содержит информацию по управлению доступом. |
||
# |
||
AccessFileName .htaccess |
||
# |
||
# Следующие строки защищают файлы .htaccess от просмотра |
||
# Web- клиентами. Поскольку файлы .htaccess часто содержат |
||
# сведения об авторизации, доступ закрывается из соображений |
||
# безопасности. Закомментируйте эти строки, если хотите |
||
# предоставить Web-клиентам возможность просмотра содержимого |
||
# файлов .htaccess. Если вы изменили директиву AccessFileName |
||
# выше, то внесите соответствующие изменения и здесь. |
||
# Поскольку часто для файлов парольной защиты используются |
||
# файлы .htpasswd, защита будет обеспечена. |
||
# |
||
<Files - н/ч \ .ht"> |
||
Order allow, deny |
||
Deny from all |
||
</Files> |
||
# |
||
# CacheNegotiatedDocs : По умолчанию Apache посылает псевдокомментарий: |
||
# не кэшировать содержимое документов по договоренности. Это указывает |
||
# прокси-серверу не кэшировать документы. Раскомментирование нижестоящей |
||
# строки отменяет это действие и прокси-серверам будет разрешено |
||
# кэширование документов. |
||
# |
||
# CacheNegotiatedDocs |
||
# |
||
# UseCanonicalName: (появилось в 1.3) Если включить эту опцию, то |
||
# всякий раз, когда Apache нужно построить самоссылающийся URL |
||
# (URL, который ссылается на сервер, с которого идет ответ) , он будет |
||
# использовать ServerName и Port для формирования "канонического" |
||
# имени. Когда эта опция выключена, сервер будет использовать |
||
# переданный клиентом hostname:port, если это возможно. Это также влияет |
||
# на SERVER NAME И SERVER PORT в CGI. |
||
# |
||
UseCanonicalName On |
||
# |
||
# TypesConfig указывает где нужно искать файл mime. types (или его аналог) |
||
# |
||
TypesConfig /etc /mime. types |
||
# |
||
# DefaultType - тип MIME по умолчанию для тех документов, тип |
||
# которых сервер не может определить по расширению файлов. |
||
# Если ваш сервер содержит в основном текстовые или |
||
# HTML-документы, следует задать значение "text/plain". |
||
# Если содержимое в основном дцоичное, например, приложения |
||
# или иллюстрации, можно использовать значение |
||
# "application/ octet-stream", чтобы заблокировать попытки |
||
# браузеров отобразить двоичные файлы как текст. |
||
# |
||
DefaultType text/plain |
||
# |
||
# mod mime magic позволяет серверу использовать различные |
||
# особенности самого файла для определения его типа. |
||
# Директива MIMEMagicFile указывает модулю, где |
||
# расположены предлагаемые определения.. |
||
# mod mime magic не является частью сервера по умолчанию |
||
# (необходимо добавить его самостоятельно с помощью |
||
# LoadModule [см параграф DSO в разделе 'Global Environment'], |
||
# или рекомпилировать сервер и включить mod mime_magic |
||
# как часть конфигурации) , поэтому он заключен в контейнер |
||
# <IfModule>. |
||
# Это значит, что директива MIMEMagicFile будет отработана |
||
# только если модуль является частью сервера. |
||
# |
||
<IfModule mod_mime_magic . о |
||
MIMEMagicFile /usr/ share/magic |
||
</IfModule> |
||
# |
||
# HostnameLookups : Протоколировать имена клиентов или же только |
||
# их IP-адреса т.е. www.apache.org (on) или 204.62.129.132 (off) |
||
# По умолчанию off, так как для сети намного лучше, когда люди |
||
# должны сознательно включать эту опцию. Вариант on приводит |
||
# к тому, что каждый клиентский запрос порождает по крайней |
||
# мере одно обращение к серверу имен. |
||
# |
||
HoetnameLookupe O££ |
||
# |
||
# ErrorLog: Расположение файла протокола ошибок. |
||
# Если директива ErrorLog не задана в контейнере |
||
# <VirtualHost>, сообщения об ошибках, касающихся |
||
# виртуального хоста, будут регистрироваться здесь. |
||
# Если вы определили файл регистрации ошибок для |
||
# контейнера <VirtualHost>, то сообщения об .ошибках хоста |
||
# будут регистрироваться в этом файле, а не здесь. |
||
# |
||
ErrorLog /var/log/httpd/error_log |
||
# |
||
# Log~Level: Управляет количеством сообщений, |
||
# записывающихся в error log. |
||
# Перечень возможных вариантов: debug, info, notice, warn, |
||
# error, crit, alert, emerg. |
||
# |
||
LogLevel warn |
||
# |
||
# Далее следуют команды, определяющие формат мнемонических |
||
# имен, которые будут использоваться в команде CustomLog (см. ниже) . |
||
# |
||
LogFormat "%h %1 %u %t \"%r\" %>s %b \ "%{Referer}i\" \"%{User- |
||
-> Agent }i\" " combined |
||
LogFormat "%h %1 %u %t \"%r\" %>s %b" common |
||
LogFormat "%{Referer}i -> %U" referer |
||
LogFormat "% {User-agent}!" agent |
||
# |
||
# Расположение файла протокола доступа (Обычный Формат Протокола) . |
||
# Если вы не определили никаких файлов протокола доступа в контейнере |
||
# <VirtualHost>, транзакции будут регистрироваться здесь. |
||
# Если вы определили файл регистрации для контейнера |
||
# <VirtualHost>, то транзакции; хоста будут регистрироваться |
||
# в этом файле, а не здесь. |
||
# |
||
CustomLog /var/log/httpd/access_log common |
||
# # Если нужен файл протокола для агентов и рекомендателей - |
||
# раскомментируйте нижестоящие команды. |
||
# |
||
# CustomLog /var/log/httpd/referer_log referer |
||
# CustomLog /var/log/httpd/agent_log agent |
||
# Чтобы использовался один общий файл для протоколирования доступа, |
||
# агента и рекомендателя (Комбинированный Файл Протокола) можно |
||
# использовать следующую команду. |
||
# |
||
# CustomLog /var/log/httpd/access_log combined |
||
# |
||
# Можно добавить строку, содержащую версию сервера |
||
# и имя виртуального хоста для страниц, сгенерированных |
||
# сервером (сообщения об ошибках,, списки ЕТР-каталогов, |
||
# вывод mod status и mod info и т.п., |
||
# но не документы, сгенерированные CGI) . |
||
# Задайте значение "EMail", чтобы также включить ссылку |
||
# mailto: на ServerAdmin. |
||
# Задайте одно из значений: On | Off | EMail |
||
# |
||
ServerSignature On |
||
# |
||
# Aliases: Укажите здесь столько псевдонимов, сколько' необходимо |
||
# (без ограничения) . Формат следующий: Alias fakename realname |
||
# |
||
# Заметьте: если завершить фиктивное имя fakename символом "/", |
||
# то сервер требует его присутствия в URL. Так, "/icons" не замещается |
||
# в этом примере. |
||
# |
||
Alias /icons/ "/var/www/ icons/" |
||
<Directory " /var/www/ icons "> |
||
Options Indexes MultiViews |
||
AllowOverride None |
||
Order a 1 1 ow , deny |
||
Allow from all |
||
</Directory> |
||
# |
||
# ScriptAlias: Указывает каталоги, в которых находятся сценарии сервера. |
||
# ScriptAliases по сути представляют собой то же самое, что и Aliases, |
||
# кроме документов из каталога realname, которые интерпретируются |
||
# как приложения и запускаются сервером по запросу вместо отправки |
||
# клиенту в качестве документов . |
||
# Правила в отношении "/"/ описанные выше для Alias, |
||
# справедливы и для директив ScriptAlias . |
||
# |
||
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/ " |
||
# |
||
# "/var/www/cgi-bin" следует заменить на CGI-каталог |
||
# ScriptAliased, если он существует и сконфигурирован. |
||
# |
||
<Directory "/var/www/cgi-bin"> |
||
AllowOverride None |
||
Options ExecCGI |
||
Order allow, deny |
||
Allow from all |
||
</Directory> |
||
# Redirect позволяет указать клиентам те документы, которые раньше |
||
# были в вашем пространстве имен, а теперь отсутствуют. Это позволяет |
||
# вам сообщить клиентам, где можно найти перемещенный документ. |
||
# Формат: Redirect old-URI new-URL |
||
# |
||
# |
||
# Директивы, управляющие отображением листингов, |
||
# сгенерированных сервером. |
||
# |
||
# |
||
# Fancy Indexing указывает на тип индексирования .каталогов - |
||
# узорчатый или стандартный. |
||
# |
||
IndexOptions Fancylndexing |
||
# |
||
# Addlcon указывает серверу какие значки показывать для |
||
# различных файлов или расширений файлов. Они отображаются |
||
# только для проиндексированных Fancylndexing каталогов. |
||
# |
||
AddlconByEncoding (CMP, /icons /compressed. gif) x-compress x-gzip |
||
AddlconByType (TXT, /icons /text. gif) text/* |
||
AddlconByType (IMG, /icons /irnage2 .gif ) image/* |
||
AddlconByType ( SND , / icons / sound2 .gif) audio / * |
||
AddlconByType (VID, /icons /movie.gif) video/* |
||
Addlcon /icons /binary. gif .bin .exe |
||
Addlcon / icons /binhex. 'gif .hqx |
||
Addlcon /icons /tar. gif .tar |
||
Addlcon /icons /world2 .gif .wrl .wrl.gz .vrml .vrm .iv |
||
Addlcon /icons /compressed. gif .z .z .tgz .gz .zip |
||
Addlcon /icons /a. gif .ps .ai .eps |
||
Addlcon /icons /layout. gif .html .shtml .htm .pdf |
||
Addlcon /icons /text. gif . txt |
||
Addlcon /icons/c.gif .с |
||
Addlcon /icons/p.gif .pi .py |
||
Addlcon / icons /f. gif .for |
||
Addlcon /icons/dvi.gif .dvi |
||
Addlcon /icons /uuencoded.gif .uu |
||
Addlcon /icons/script. gif .conf .sh . shar .csh . ksh .tcl |
||
Addlcon / icons /tex. gif .tex |
||
Addlcon /icons /bomb. gif core |
||
Addlcon /icons /back. gif .. |
||
Addlcon /icons/hand. right. gif README |
||
Addlcon /icons /folder. gif ^^DIRECTORY^^ |
||
Addlcon /icons /blank. gif ^^BLANKICON^^ |
||
# |
||
# Defaultlcon указывает, какой значок .использовать для файлов, |
||
# для которых он явно не указан. |
||
# |
||
Defaultlcon /icons/unknown. gif |
||
# AddDescription позволяет разместить краткое описание после. |
||
# имени файла в генерируемых сервером индексах. |
||
# Формат: AddDescription "описание" ИмяФайла |
||
# |
||
# AddDescription "GZIP compressed document" . gz |
||
# AddDescription "tar archive" .tar |
||
# AddDescription "GZIP compressed tar archive" .tgz |
||
# |
||
# |
||
# ReadmeName - имя README-файла, которое сервер будет искать |
||
# по умолчанию, чтобы добавить к списку каталогов. |
||
# |
||
# HeaderName - имя файла, которое сервер будет искать, |
||
# чтобы добавить к началу индекса каталогов. |
||
# |
||
# Сервер сначала будет искать файл name.html и учтет его, |
||
# если найдет. Если этот файл не обнаружится, то будет |
||
# выполнен поиск файла name . txt . Если сервер найдет |
||
# этот файл, то включит его как текстовый файл. |
||
# |
||
ReadmeName README |
||
HeaderName HEADER |
||
# |
||
# Indexlgnore - список имен файлов, игнорируемых |
||
# при индексировании каталога. Разрешается использование |
||
# символов подстановки в соответствии с синтаксисом оболочки. |
||
# |
||
Indexlgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t |
||
# |
||
# AddEncoding позволяет указать некоторым браузерам |
||
# (Mosaic/X 2.1+) распаковывать информация? на лету. |
||
# Примечание : не все браузеры это поддерживают . |
||
# N.B. Символ (") является признаком текста и не отображается |
||
# 2) локальное перенаправление |
||
#ErrorDocument 404 /missing.html |
||
# для перенаправления на локальный URL /missing.html |
||
#ErrorDocument 404 /cgi-bin/missing_handler .pi |
||
# N.B. Можно перенаправлять на сценарий или документ, |
||
# используя включения со стороны сервера. |
||
# |
||
# 3) внешнее перенаправление |
||
#ErrorDocument 402 http : / /some . other_server . com/subscription_inf о . html |
||
# N.B. Многие переменные окружения, связанные |
||
# с исходным запросом, в таком сценарии будут недоступны. |
||
# |
||
# Следующие команды модифицируют обычную процедуру ответа HTTP. |
||
# Первая команда запрещает keepalive для Netscape 2.x и браузеров, |
||
# которые представляются как Netscape 2.x. Известны проблемы, |
||
# связанные с этим. Вторая команда - для Microsoft Internet |
||
# Explorer 4.0Ь2, которая имеет неправильную реализацию НТТР/1.1 |
||
# и неправильно поддерживает keepalive, когда эта опция |
||
# используется в ответах 301 и 302 (перенаправление) . |
||
BrowserMatch "Mozilla/2" nokeepalive |
||
BrowserMatch "MSIE 4\.0b2; " nokeepalive downgrade- 1.0 force-response- 1. 0 |
||
# |
||
# Следующие команды запрещают ответы HTTP/1.1 браузерам, |
||
# которые нарушают спецификацию НТТР/1 отсутствием понимания самых |
||
# простых ответов 1.1. |
||
# |
||
BrowserMatch "RealPlayer 4\.0" force-response-1 .0 |
||
BrowserMatch "Java/l\.0" force-response-1 . 0 |
||
BrowserMatch "ODK/IN.O" force-response-1 .0 |
||
# Если модуль perl установлен, то следующие директивы выполнятся. |
||
<IfModule mod_perl.c> |
||
Alias /perl/ /var/www/perl/ |
||
<Location /perl> |
||
SetHandler perl-script |
||
PerlHandler Apache: : Registry |
||
Options +ExecCGI |
||
</Location> |
||
</IfModule> |
||
# |
||
# Разрешает http-размещение (наподобие публикации в Netscape Gold) . |
||
# Используйте htpasswd для генерации /etc/httpd/conf/passwd. |
||
# Необходимо раскомментировать эти две строки и в начале этого файла: |
||
# |
||
#LoadModule put_module modules /mod_put. so |
||
#AddModule mod_put.c |
||
# |
||
#Alias /upload /tmp |
||
#<Location /upload> |
||
# EnablePut On |
||
# AuthType Basic |
||
# AuthName Temporary |
||
# AuthUserFile /etc/httpd/conf/passwd |
||
# EnableDelete Off |
||
# umask 007 |
||
# <bimit PUT> |
||
# require valid-user |
||
# </Limit> |
||
#</Location> |
||
# |
||
# Позволяет серверу возвращать отчет, находящийся по URL |
||
# http://servername/server-status |
||
# Для включения этого режима следует изменить |
||
# ".your_domain.com" на ваш домен. |
||
# |
||
#<Location /server-status> |
||
# SetHandler server-status |
||
# Order deny, allow |
||
# Deny from all |
||
# Allow from .your_domain.com |
||
#</Location> |
||
# Позволяет отчеты о конфигурации удаленного сервера |
||
# с URL http: //servername/server-info |
||
# (необходимо, чтобы mod info. с был загружен) |
||
# Для включения этого .режима следует изменить |
||
# ".your_domain.com" на ваш домен. |
||
# |
||
#<bocation /server- info> |
||
# SetHandler server- info |
||
# Order deny, allow |
||
# Deny from all |
||
# Allow from .your_dpmain.com |
||
#</Location> |
||
# Разрешает доступ к документам локального компьютера с localhost |
||
Alias /doc/ /usr/share/doc/ |
||
<Location /doo |
||
order deny, allow |
||
deny from all |
||
allow from localhost |
||
Options Indexes FollowSymLinks |
||
</Location> |
||
# Имеются сообщения, что некоторые люди пытаются незаконно использовать |
||
# старую ошибку со времен версии 1.1. Эта ошибка была в сценарии CGI, |
||
# поставлявшемся как часть Apache. Сняв комментарии с этих строк, можно |
||
# перенаправить эти атаки на протоколирующий сценарий, который находится |
||
# на phf.apache.org. Или можно самостоятельно записывать их, |
||
# используя сценарий support/phf abuse log.cgi. |
||
# |
||
#<Location /cgi-bin/phf*> |
||
# Deny from all |
||
# |
||
# Пример VirtualHost: |
||
# Практически любая директива Apache может вставляться в |
||
# контейнер VirtualHost . |
||
# |
||
# <VirtualHos t ip . address . of . host . some_domain . com> |
||
# ServerAdmin webmasterShost .some_domain.com |
||
# DocumentRoot /www/docs/host . some_domain. com |
||
# ServerName host . some_domain . com |
||
# ErrorLog logs/host .some_domain.com-error_log |
||
# CustomLog logs /host. some_domain.com-access_log common |
||
#</VirtualHost> |
||
#<VirtualHost _default_:*> |
||
#</VirtualHost> |
||
<If Define HAVE_SSL> |
||
## |
||
## SSL Virtual Host Context |
||
## |
||
# По умолчанию Apache только слушает порт 80. |
||
# Определение виртуального сервера (см. ниже) не вызывает |
||
# автоматического прослушивания порта виртуального сервера. |
||
Listen 443 |
||
<VirtualHost _default_:443> |
||
# Общая установка виртуального хоста |
||
DocumentRoot "/var/www/html" |
||
# SSL Engine ключ: |
||
# Разрешение/запрет SSL для этого виртуального хоста. |
||
SSLEngine on |
||
# SSL шифры: |
||
# Список шифров, которые клиент может использовать. |
||
# См. в документе mod ssl полный список шифров. |
||
#SSLCipherSuite ALL: !ADH:RC4+RSA:+HIGH: +MEDIUM: +LOW: +SSLv2 : +EXP: +eNULL |
||
# Сертификат сервера: |
||
# Адресует SSLCertificateFile на РЕМ-кодированный сертификат. |
||
# Если сертификат зашифрован, появится запрос пароля. |
||
# Обратите внимание: kill -HUP- вызовет повторный запрос |
||
# пароля. Тестовый сертификат можно сгенерировать с помощью |
||
# `make certificate' в ходе построения. Если вы используете и |
||
# RSA и DSA сертификаты, то оба можно конфигурировать одновременно |
||
# (чтобы также разрешить использование шифров DSA и т.д.) . |
||
SSLCertificateFile /etc/httpd/conf /ssl .crt/server ,crt |
||
#SSLCertif icateFile /etc/httpd/conf /ssl . crt/server-dsa. crt |
||
# Частный ключ сервера: |
||
# Если ключ не объединен с сертификатом, используйте эту директиву, |
||
# чтобы указать файл ключа. Если вы используете и RSA и DSA |
||
# сертификаты, то оба можно конфигурировать одновременно |
||
# (чтобы также разрешить использование шифров DSA и т.д.) . |
||
SSLCertif icateKeyFile /etc/httpd/conf /ssl . key/server . key |
||
#SSLCertificateKeyFile /etc/httpd/conf /ssl. key/server-dsa. key |
||
# Цепочка сертификатов сервера : |
||
# Адресует SSLCertificateChainFile на файл, содержащий |
||
# соединение РЕМ- кодированных СА- сертификатов. Он |
||
# формирует цепочку сертификатов для серверного сертификата . |
||
# Альтернатива: указанный файл может быть тем же, что и файл |
||
# SSLCertificateFile, если СА-сертификаты, для удобства, |
||
# непосредственно связаны с серверным сертификатом. |
||
#SSLCertificateChainFile /etc/httpd/conf /ssl . crt/ca.crt |
||
# Авторизация сертификата (СА) : |
||
# Задайте пути верификации сертификата СА, т.е. место где |
||
# можно найти сертификаты СА для аутентификации клиентов или |
||
# один большой файл, содержащий все сертификаты (файл должен |
||
# быть РЕМ-кодированным) . |
||
# Внимание : Внутри SSLCACertificatePath следует |
||
# хешировать ссылки на файлы сертификатов. Пользуйтесь |
||
# Makefile для обновления хешированных ссылок после |
||
# внесения изменений. |
||
#SSLCACertificatePath /etc/httpd/conf /ssl. crt |
||
#SSLCACertificateFile /etc/httpd/conf /ssl. crt/ca-bundle. crt |
||
# Список отмененных сертификатов (CRL) : |
||
# Задайте путь отмененных СА, чтобы можно было найти список |
||
# отмененных СА для аутентификации клиентов или один большой файл, |
||
# содержащий все сертификаты (файл должен быть РЕМ-кодированным) . |
||
# Внимание : Внутри SSLCARevocationPath следует |
||
# хешировать ссылки на файлы сертификатов. Пользуйтесь |
||
# Makefile для обновления хешированных ссылок после |
||
# внесения изменений. |
||
#SSLCARevocationPath /etc/httpd/conf /ssl . crl |
||
#SSLCARevocationFile /etc/httpd/conf /ssl . crl/ca-bundle. crl |
||
# Аутентификация клиента (тип) : |
||
# Тип и глубина верификации сертификатов клиентов. Типы: |
||
# none, optional, require и optional no ca. Глубина |
||
# задается как номер, который определяет, насколько глубоко |
||
# следует проверять цепочку издателя сертификата, |
||
# чтобы убедиться в негодности сертификата. |
||
#SSLVerifyClient require |
||
#SSLVerifyDepth 10 |
||
# Контроль доступа: |
||
# Посредством SSLRequire можно управлять доступом к каталогам, |
||
# задавая произвольные булевы выражения, содержащие обращения |
||
# к серверным переменным. Синтаксис выражений представляет собой |
||
# нечто среднее между С и Perl. Подробности см. в файле mod ssl. |
||
#<Location /> |
||
#SSLReqUire ( %{SSL_CIPHER) ! ~ m/ n (ЕХР |NULL) -/ \ |
||
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ |
||
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \ |
||
# and %{TIME_WDAY) >= 1 and %{TIME_WDAY} <= 5 \ |
||
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \ |
||
tt or %{REMOTE_ADDR) =~ m/ n !92\ .76\ . 162\ . [0-9] +$/ |
||
#</Location> |
||
# Опции SSL Engine: |
||
# Установка различных опций SSL engine. |
||
# о FakeBasicAuth: |
||
# Трансляция клиента Х.509 в Basic Authorisation. |
||
# Это значит, что для контроля доступа могут |
||
# использоваться стандартные методы Auth/DBMAuth. |
||
# Имя пользователя представляет собой однострочную версию |
||
# клиентского сертификата Х.509. |
||
# Обратите внимание, что от пользователя не требуется |
||
# пароль. Каждый ввод в пользовательском файле требует |
||
# пароля: ~xxj31ZMTZzkVA' . |
||
# о ExportCertData : |
||
# Экспортируются две дополнительных переменных: |
||
# SSL CLIENT CERT и SSL_SERVER_CERT . Они |
||
# содержат РЕМ-кодированные сертификаты сервера |
||
# (они существуют всегда) и клиента (существуют |
||
§ только, если используется аутентификация клиента) . |
||
# Это можно использовать для импорта сертификатов |
||
# в CGI- сценарии. |
||
# о StdEnvVarc: |
||
# Экспортируются V SSL *' переменные окружения, |
||
# относящиеся к стандартным SSL/TLS. |
||
# По умолчанию это экспортирование заблокировано из |
||
# соображений производительности, поскольку операция |
||
# извлечения относится к достаточно дорогим, и бесполезна |
||
# для обслуживания статического контента. Поэтому |
||
# разрешение выдается обычно только для CGI- и |
||
# SSI-запросов. |
||
# о CompatEnvVars : |
||
# Экспортируются устаревшие переменные окружения |
||
# для совместимости со старыми версиями Apache-SSL 1.x, |
||
# mod ssl 2.0.x, Sioux 1.0 и Stronghold 2.x. Используйте |
||
# для совместимости с существующими CGI-сценариями. |
||
# о StrictRequire: |
||
# Запрещается доступ, когда применяется "SSLRequireSSL" |
||
f или "SSLRequire", даже в ситуации "Satisfy any", |
||
# т.е. когда применяется эта опция, доступ запрещен |
||
# и никакой другой модуль изменить этого не может.. |
||
# OptRenegotiate: |
||
# Разрешает оптимизированную обработку SSL-соединения |
||
# когда SSL-директивы используются в контексте |
||
# отдельного каталога. |
||
tSSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire |
||
<Files ~ "\. (cgi|shtml)$"> |
||
SSLOptions +StdEnvVars |
||
</Files> |
||
<Directory "/var/www/cgi-bin"> |
||
SSLOptions +StdEnvVars |
||
</Directory> |
||
# Примечание: Большинство проблем взлома клиентов |
||
# связаны с возможностями подтверждения активности |
||
# HTTP (keepalive) , поэтому следует запретить keepalive |
||
До версии 1.3.6 конфигурирование Apache производилось тремя основными конфигурационными файлами: httpd.conf, srm.conf, и access .conf. В Red Hat при стандартной установке Apache файлы конфигурации находятся в /etc/httpd/conf/, хотя расположение их легко изменить (это показано далее при рассмотрении запуска Web-сервера Apache). Начиная с версии 1.3.6, эти три файла объединены в один: httpd. conf. Этот общий файл выполняет функции всех трех файлов и его содержимое почти такое же, как и у исходных трех файлов.
Роль конфигурационных файлов Apache не очень четко определена и иногда функции дублируются, но обычно они используются следующим образом.
httpd.conf.
Используется для установки общих параметров, таких как номер порта, используемого сервером, и списка загружаемых при запуске сервера модулей. Этот файл также указывает на расположение файлов srm. conf и access. conf.
srm.conf.
Определяет другие общие параметры: структуру корневого дерева документов сервера и правила, относящиеся к программам CGI.
access.conf.
Используется для установки ограничений доступа для сервера или отдельных каталогов.
Рассмотрим основные параметры, на которые должен обратить внимание любой Web-мастер перед запуском Apache на открытом Web-сервере. В дальнейших примерах используется сервер Apache версии 1.3.19, поставляемый с предварительной версией Red Hat Linux 7.1. Эта версия Apache использует один конфигурационный файл /etc/httpd/conf /httpd. conf.
С помощью задаваемых в этом файле параметров можно определить поведение Apache-сервера в целом, в отношении ответов на запросы HTTP, и в отношении любых виртуальных хостов, которые выглядят как отдельные Web-сайты для любого браузера.
На Apache-сервере можно стлать сколько угодно виртуальных хостов. Но каждый Apache-сервер требует главного хоста. Директивы в секции главного сервера определяют параметры по умолчанию для главного хоста, равно как и любые директивы, не заданные в рамках любого виртуального хоста.
Port
Команда Port - второй важный элемент. Подразумевается, что по умолчанию Web-сервер работает с 80-м портом. Когда браузер запрашивает URL без порта, он подразумевает, что URL запрашивается с сервера через порт 80. Если вы используете брандмауер с высоким или средним уровнем защиты, удостоверьтесь в том, что он настроен на разрешение приема WWW-данных, как описано в гл. 31.
Из-за уязвимости процессов, работающих с номерами портов меньше 1024, можно попробовать запустить сервер через порт с номером выше 1024 (если запускается Web-сервер с ограниченным доступом по сети Internet и необходимо избежать риска, связанного с номерами портов меньше 1024). Обычно для таких Web-серверов используются порты 8000 и 8080, но можно выбрать любой свободный порт. Если вы используете брандмауер с высоким уровнем защиты, удостоверьтесь в том, что он настроен на разрешение приема WWW-данных для выбранного порта. Настраивая свой брандмауер с помощью утилиты lokkit, описанной в главе Chapter 31, при использовании порта 8080, введите 8080 :udp, 8080: tcp в поле Other Ports (Другие порты) в разделе Customization (Настройка).
User И Group
Команды User и Group - критические элементы, так как они оказывают существенное влияние на безопасность системы. Обычно httpd запускается как root, но этот процесс не прослушивает соединения. Чаще этот процесс запускает один или несколько дочерних процессов user и group (указанные именем либо ID-номером), определенных этими командами конфигурации.
Запуск процессов Web-сервером, включая программы CGI, в режиме root является огромным риском, особенно если плохо написанный сценарий CGI оставляет большие бреши в защите. Запустив Web-сервер и связанные с ним дочерние процессы под именем пользователя с ограниченными привилегиями, можно снизить опасность успешных атак на сервер.
Что такое Web-сервер
Web-серверы для Linux
Установка Apache
Конфигурирование Apache
Управление Web-сервером
Построение Web-сайта
Вы уже достаточно долго изучаете Linux и сейчас готовы к обзору наиболее популярного из применений этой операционной системы: использования Linux для создания Web-серверов небольшого и среднего масштабов.
Linux широко используется для разработки и поддержки Web-серверов по нескольким причинам.
Linux обеспечивает гибкость и управляемость Unix.
Установка и запуск Linux практически ничего не стоит.
Linux обеспечивает широкий набор средств для построения довольно сложных Web-сайтов.
В этой главе рассмотрены основные принципы превращения персонального компьютера под управлением Linux в Web-сервер для сайта Intranet или Internet. Глава начинается с обзора задач Web-сервера и основных Web-серверов, доступных под Linux.
Приведена подробная информация по установке, конфигурированию и сопровождению Web-сервера Apache - наиболее популярного Web-сервера для Internet, который в настоящее время поставляется с Red Hat Linux 7.1.
В конце главы поэтапно рассмотрен пример построения простой Web-странички с использованием Apache. Глава позволит пользователю уверенно экспериментировать с различными Web-серверами, работающими под Linux. Более того, пользователь сможет самостоятельно создать свой Web-сайт, используя Linux и Apache.
После того, как Web-сервер сконфигурирован и отлажен, создадим для примера небольшой Web-сайт, чтобы показать, как развертывать информацию в Web.
Построим сайт, который будет содержать информацию о небольшой издательской компании On The Web Publishers. Разместим на сайте список новых изданий, общую информацию об издателе, форму для контактов и защищенный паролем раздел для эксклюзивного использования авторами, имеющим контракт с издателем.
В рамках поставленной задачи попытаемся создать сайт, содержащий HTML-документы и изображения, использующий CGI-программирование и выполняющий контроль доступа защищенного паролем раздела на сайте.
Определим структуру сайта, как показано на рис. 32.2.
Рис. 32.2.
Структура Web-сайта
Создадим файлы, необходимые для реализации этой структуры. Подразумевая использование конфигурации, рассмотренной ранее в главе, поместим корневой каталог для дерева HTML-документов в /var /www/html, а каталог CGI - в /var /www/cgi-bin. Дерево каталогов и файлов:
/var/www/html/index.html
/var/www/html/about/index.html
/var/www/html/books/index.html
/var/www/html/contact/index.html
/var/www/html/authors/index.html
/var/www/cgi-bin/formmail
Кроме последнего файла, который мы рассмотрим вкратце, все перечисленные файлы являются HTML-файлами. Все вспомогательные файлы с изображениями, используемые HTML-файлами, можно разместить в тех же каталогах, что и файлы HTML. Многие Web-мастера предпочитают размешать все файлы с изображениями в другом каталоге. Этот каталог может быть следующим.
/var/www/html/images/
Так как в главе не рассматривался язык HTML, оценим два HTML-файла в качестве примеров соответствующих документов. Начнем с главной домашней странички /var/www/html/ index. html. В данном случае исходный текст файла может быть следующим.
<HTML>
<HEAD>
<TITLE>On the Web Publishers</TITLE>
</HEAD>
<BODY BGCOLOR=lightcyan TEXT=midnightblue>
Директивы и модули этого раздела управляют операциями сервера Apache в целом. Все, что входит в этот раздел, применимо ко всем хостам Apache, независимо от того, идет ли речь о виртуальном хосте или главном сервере.
Server-Type
Первая команда, которая будет описана - это ServerType. Сервер Apache может работать в двух режимах. Первый режим - самостоятельный (standalone), когда его собственные процессы прослушивают соединения и в режиме inetd, с которым читатель уже ознакомился в параграфе о работе сетей. Во втором режиме (с inetd) inetd прослушивает соединения и запускает процесс Apache при установлении соединения. Если Web-сервер Apache запускается впервые, то лучше не запускать его в самостоятельном режиме, пока вы не ознакомитесь с inetd и не получите необходимые основания для работы сервера в самостоятельном режиме.
ServerRoot
ServerRoot используется для задания базового каталога, в котором находятся файлы конфигурации и протоколов. Red Hat устанавливает их в каталог etc/httpd. В этом каталоге есть каталог conf, содержащий три файла конфигурации, и каталог logs для протоколов в виде ссылки на/var/log/httpd.
Можно по своему усмотрению переместить этот каталог внутри системы на позицию, соответствующую вашему стилю администрирования. Но проще всего оставить все файлы там, куда их помещает дистрибутив Linux.
Загрузка Модулей
Первая секция состоит из последовательности команд LoadModule, за которыми следует последовательность команд AddModule. Функциональность Apache создается и расширяется за счет использования модулей. В ранних версиях Apache эти модули были объединены в исполняемый файл Apache - httpd. Начиная с версии Apache 1.3 можно использовать модули, загружаемые при запуске сервера.
Так как большинство этих модулей конфигурируется посредством команд, находящихся в файле конфигурации, очень важно, чтобы все модули загружались до появления любой другой команды файла httpd. conf.
Дм большинства базовых инсталляций достаточно использовать список модулей по умолчанию, который можно не корректировать. Если нужно расширить или изменить функциональность Web-сервера, обратитесь к on-line документации по адресу httpd. apache. org за дополнительной информацией о добавлении загружаемых модулей и использовании команд LoadModule и AddModule.
Stronghold является одним из наиболее известных коммерческих Web-серверов для Linux. Stronghold - это коммерческая версия Apache, дополненная поддержкой SSL.
Поддержка SSL (Secure Sockets Layer - Уровень безопасного соединения) необходима при создании безопасных связей браузер-сервер, используемых приложениями интерактивной торговли или там, где нужно зашифровать или скрыть от любопытных глаз данные, передающиеся между клиентом и сервером.
Stronghold имеет все средства для создания безопасного сервера, включая средства для Certificate Authority (сертификация полномочий). При помощи Certificate Authority можно выдавать цифровые сертификаты, санкционированные сторонними организациями по утверждению сертификатов, например Verisign. Кроме того, Stronghold поддерживает аппаратные акселераторы шифрования, равно как и 128-битовые ключи для повышения надежности шифрования.
Stronghold поставляется с полным текстом исходного кода, что позволяет использовать его аналогично Apache, включая компиляцию вместе с модулями для Apache и написание собственных модулей.
Stronghold распространяет фирма С2 Software по адресу
http://www.c2.net/products/sh3/index.php3
.
В следующем параграфе (о защите каталогов) вы узнаёте, что одним из основных методов защиты является использование имени и пароля, который ограничивает доступ конкретному ряду пользователей. Пользователи должны правильно ввести свои имя и пароль для получения доступа к защищенному каталогу.
Создавать пользователей очень просто. Для этого достаточно воспользоваться командой htpasswd, которая при обычной установке Apache из дистрибутива Red Hat Linux находится в
/usr/bin/htpasswd. Эта программа используется как для создания файла паролей, так и для добавления индивидуальных пользователей. Файл паролей выполняет функцию хранилища имен пользователей и зашифрованных паролей, используемых Apache для управления доступом.
#
htpasswd -с filename user-name
При выполнении этой команды создается файл
filename
и добавляется первый пользователь. Флаг -с указывает, что файл нужно создать. Файл паролей может находиться где угодно, лишь бы он был доступен для Web-сервера Apache. Неплохим местом для него может служить каталог с файлами конфигурации. Например, команда
#
htpasswd -с /etc/httpd/conf/users userl
создает файл пользователей в том же каталоге, что и другие файлы конфигурации Apache, и до-бавляегв него пользователя userl.
При выполнении этой команды программа дважды запрашивает пароль - для проверки его корректности. Затем пароль шифруется и записывается в /etc/httpd/conf /users. Соответствующая строка этого файла выглядит примерно так:
userl:N3ImVAxFtiv0
Формат строки: имя пользователя, двоеточие и зашифрованный пароль. Информация о каждом пользователе находится на отдельной строке.
Хотя это выглядит, как пароли в системном файле паролей (/etc/passwd), и файл паролей Apache зашифровывается аналогично, процесс шифрования в htpasswd совсем иной. Нельзя просто скопировать зашифрованные пароли из /etc/passwd для создания файла паролей Apache.
Для добавления пользователей после создания файла используется команда htpasswd без флага -с.
Последняя рассматриваемая функция администрирования - управление протоколами. Apache создает два важных протокола: протокол доступа и протокол ошибок. Вместе они обеспечивают важной информацией многие функции, включая отладку ошибочных сценариев CGI и генерацию статистических отчетов доступа с подробной информацией об использовании Web-сайта.
Однако если о них забыть, эти протоколы будут увеличиваться в объеме, достигая огромнных размеров. С увеличением их размера значимость информации уменьшается, ибо обработка данных затрудняется.
.Поэтому полезно установить график чередования протоколов. Чередование протоколов означает сохранение текущей версии в архиве и создание нового, пустого протокола. В зависимости от посещаемости сайта следует производить чередование протоколов раз в месяц, неделю или день
Red Hat Linux 7.1 включает протоколы Apache в каталог /var/log/httpd. Они чередуются ; другими протоколами из /var/log в ежедневном режиме, как указано в сценарии /etc/ cron.daily/logrotate.
Для чередования протоколов используется утилита rotatelogs, поставляемая с дистрибутивом Apache. По умолчанию Red Hat Linux устанавливает ее в /usr/sbin/rotatelogs. Для использования программы добавьте следующую строку в файл httpd. conf.
TransferLog " |/usr/sbin/rotatelogs /some/location/file time"
Элемент /sorae/location/f ile дает базовое имя файла для чередующихся протоколов Число, соответствующее системному времени начала протоколирования, добавляется к имена файла. Параметр time, в секундах, указывает, как часто выполняется чередование протоколов.
Пользователь должен уметь запустить и остановить Web-сервер после его установки. Кроме того, нужно время от времени выполнять некоторые служебные операции, чтобы убедиться в том, что сервер работает без инцидентов. Необходимо добавлять и удалять пользователей и группы, защищать каталоги при помощи управления доступом и осуществлять контроль протоколов сервера.
Оставшаяся часть главы посвящена детальному обзору Web-сервера Apache по двум причинам:
Сервер Apache является Web-сервером по умолчанию, который входит в поставку с Red Hat Linux (включая Red Hat Linux 7.1 на прилагаемом компакт-диске).
Так как в настоящее время Apache является самым популярным Web-сервером для Internet, то, вероятнее всего, именно его вы будете использовать на своем компьютере.
Если при установке системы Linux выполнена достаточно полная инсталляция, то, вероятнее всего, Apache уже установлен. Существует много способов проверить, установлен ли Apache. Можно использовать команду rpm.
$ rpm -q apache
Если Apache уже установлен, ответ команды будет примерно таким:
apache-1.3.19-5
Если в ответ на команду rpm получено сообщение, что Apache уже установлен, то часть главы до параграфа
"Конфигурирование Apache"
можно пропустить.
Наиболее простой способ установки Apache - с прилагаемого к книге диска CD-ROM. Для этого смонтируйте CD-ROM (обычно в /mnt/cdrom) и выполните команду cd в каталог /imt/cdrom/RedHat/RPMS. (Если CD-ROM смонтирован не в /mnt/cdrom, перейдите в каталог, соответствующий точке монтирования). Этот каталог содержит все файлы rpm полного дистрибутива Red Hat Linux. Для установки пакета выполните команду rрm
$ rpm -i apache-1.3.19-5.1386.rpm
Сервер Jigsaw - это построенный средствами Java преемник сервера Сегп, который был одним из первых Web-серверов. Как сервер, полностью построенный средствами Java, он может работать под управлением любой операционной системы, поддерживающей этот язык, включая Unix/Linux и Microsoft Windows.
Jigsaw строится с использованием нескольких разновидностей Java-объектов, включая:
Resources (Ресурсы).
Ресурсы определяют, что отображается на Web-странице, включая статические объекты (текст, файлы иллюстраций) и динамические объекты (сценарии).
Frames (Фреймы).
Эти объекты определяют, как обрабатываются ресурсы. Фрейм включает всю необходимую для обработки определенного ресурса информацию, например, объект HTTPframe обрабатывает HTTP-ресурс.
Filters (Фильтры).
Средство динамической модификации ресурсов. Например, если Web-tam распознает незарегистрированного пользователя, этот пользователь "фильтруется" на входную страницу.
Indexer (Индексатор).
Средство классификации ресурсов. Два главных индекса - каталоги (для группировки файлов) и расширения (для обычных файлов, наподобие, ТХТ или INI).
На момент написания книги окончательно отлаженной была версия Jigsaw 2.2.O. Версии Jigsaw соответствуют версиям ядра Linux, например, если вы обнаружите версию Jigsaw с номером, средняя цифра которого нечетная (скажем, Jigsaw 2.3.4), значит перед вами не окончательная версия. W3C поддерживает страницу, посвященную этому серверу по адресу www. w3.org/ Jigsaw.
Примечание
Предыдущий WSC-сервер (Cern) был одним из первых в Internet К сожалению, он больше не поддерживается.
Web впервые появился в мире Unix, поэтому неудивительно, что под Unix-платформы написано наибольшее количество существующих Web-серверов.
Все что существует под Unix, доступно для Linux, в том числе и Web-серверы Unix. Большинство Web-серверов Linux бесплатны. Наиболее известны следующие Web-серверы Linux.
NCSAhttpd
Apache
AOLserver
Boa
WN
W3G/Cern
Наряду с бесплатными серверами существует несколько коммерческих серверов:
FastTrack/iPlanet
Java Web Server
Stronghold
Zeus
Рассмотрим те бесплатные серверы, которые используются реже. Серверы в этой нише рынка помогают увидеть разнообразие технологий и возможностей Web-серверов.
WN - еще один бесплатный сервер с уникальными возможностями, отличающими его от других серверов. WN позволяет проводить полнотекстовый поиск до документам, которые разработчики называют
логическими документами HTML
(документы, состоящие более чем из одного файла). Кроме того, пользователи могут искать файлы на сервере и легко получать удовлетворяющие условиям поиска документы. Пользователи могут загружать простой логический документ, состоящий из нескольких связанных документов, упрощая печать файлов, представляющих собой последовательность небольших документов.
Еще одна уникальная особенность сервера WN - способность работать с условными документами. Сервер WN может создать простой документ с определениями, которые возвращают клиенту правильную версию документа в зависимости от таких переменных, как IP-адрес и версия браузера клиента.
Модель безопасности сервера WN отличает его от Apache и Web-сервера NCSA httpd, которые по умолчанию работают с файлами, пока не нарушены конкретные права доступа. WN не работает ни с одним файлом, пока не получены конкретные права доступа. Реализуя эту модель. сервер становится более безопасным и предоставляет более мощный контроль доступа к файлам.
Копию WN можно получить по адресу hopf.math. nwu. edu.
Если планируется запустить высококлассный или очень объемный Web-сервер, загрузите последнюю версию Apache с узла httpd.apache.org (рис. 32.1). При использовании последней версии можно быть уверенным, что незначительные ошибки, которые не повлияли бы на небольшой сайт, не проявятся при работе с более сложным или более посещаемым сайтом.
Рис. 32.1.
Web-сайт Apache
Примечание
Приведенная далее информация по конфигурированию и управлению Apache подразумевает использование версии этого Web-сервера с Red Hat CD-ROM, прилагаемого к книге Новые версии Apache совместимы сверху вниз. Конфигурационные файлы, рассматриваемые в главе, должны работать и с новыми версиями Apache.
При загрузке Apache с Web-сайта Apache можно загрузить либо оригинал исходного кода, либо откомпилированные исполняемые файлы для Linux. Существуют бесспорные аргументы в пользу первого способа, особенно если планируется разработка программ с использованием API Apache или внедрение дополнительных модулей в сервер. Однако рекомендуем загрузить уже готовые исполняемые модули для построения Web-сайта с базовым набором свойств Apache. В книге нет руководства по компилированию собственной копии Apache, так как для этого требуется более тщательное изучение Web-серверов.
Для получения последнего дистрибутива исполняемых модулей Apache перейдите в браузере на Web-сайт Apache (httpd. apache. org) и выберите ссылку загрузки (Download). Это приведе-к каталогу файлов и ссылке под названием Binaries. Последовав за ссылкой Binaries, укажите операционную систему (в нашем случае, Linux). В окне браузера отобразится список доступных файлов. Во время написания книги этот список был следующим.
Заметьте: судя по именам файлов, текущей версией является Apache I.3.6. Обозначения 1586 и 1686 указывают, что пакет откомпилирован с оптимизацией для процессоров класса Pentium либо Pentium II соответственно.
Файлы README являются текстовыми. Не мешало бы их прочесть перед загрузкой. Файлы . gz сжаты утилитой gzip. ASC-файлы включают сигнатуру PGP. После загрузки выбранного пакета распакуйте файл во временном каталоге. Для распаковки архива в подкаталог текущего каталога используйте команду:
Если Apache установлен при установке Red Hat, то загрузочные файлы во время старта системы уже настроены на запуск Apache. Эти настройки находятся в файле /etc/re. d/ init. d/ httpd. Данный файл является исполняемым сценарием, которому передаются два возможных параметра: start и stop. Если планируется использовать версию Apache, поставляемую с дистрибутивом Red Hat и расположение конфигурационных файлов не будет изменяться, то можно запускать и останавливать Web-сервер вручную, используя команду
#
/etc/re.d/init.d/httpd start
для запуска сервера и команду
#
/etc/re.
d/init.d/httpd stop
для останова сервера.
Примечание
Запуск и останов Web-сервера производятся пользователем root, чтобы главный процесс сервера мог изменять пользователей для запуска дочерних процессов при прослушивании соединений.
Если устанавливаются собственные исполняемые модули или скомпилированные из исходников новые двоичные файлы, или необходимо изменить расположение конфигурационных файлов, то нужно уметь вручную запускать команду httpd.
Обычно httpd находится в /usr/sbin/. Допустимы два ключа.
- f указывает на положение файла httpd. conf.
-d указывает на корневой каталог сервера, переназначая файл конфигурации.
Обычно достаточно использовать флаг - f, поскольку ServerRoot указан в файле httpd. conf. Например, если файлы конфигурации находятся в /home/httpd/conf, то запустить сервер можно с использованием следующей команды.
#
/uar/sbin/httpd -f /etc/httpd/conf/httpd.conf
Если сервер запущен самостоятельно, без использования /etc/re. d/init. d/httpd, и его надо остановить вручную, то нужно знать правильный ID процесса (PID) для сервера. PID сервера можно определить, используя команду ps.
#
ps -aux | grep httpd
Эта команда выдает список процессов подобный следующему.
apache 545 0.1 3.8 1104 572 ? S 17:52 0:00 [httpd]
apache 546 0.0 3 .8 1104 572 ? S 17:52 0:00 [httpd]
apache 547 0.2 3.8 1104 572 ? S 17:52 0:00 [httpd]
apache 548 0.1 3.8 1104 572 ? S 17:52 0:00 [httpd]
apacfie 549 0.0 3.8 1104 572 ? S 17:52 0:00 [httpd]
apache 550 0.3 3.8 1104 572 ? S 17:52 0:00 [httpd]
root 544 0.5 4 1104 592 ? S 17:52 0:00 /usr/sbin/httpd
Заметьте: все процессы принадлежат apache за исключением одного, принадлежащего root. Это родительский процесс всех процессов httpd, как раз тот, который нужно остановить командой
#
kill 544
Как было указано в параграфе о разрешении HTML-каталога, существует возможность установить управление доступом для каждого каталога отдельно. Обычно это делается при помощи файла . htaccess в том каталоге, который надо защитить. В данный файл помещаются необходимые команды конфигурирования.
Для управления доступом в этом файле используются следующие основные команды:
AuthUserFile
AuthGroupFile
AuthName
AuthType
require
order
deny
allow
AuthUserFile И AuthGroupFile
Команды AuthUserFile и AuthGroupFile позволяют указать расположение файлов пользователей и групп. В нашем примере эти команды следующие:
AuthUserFile /etc/httpd/conf/users AuthGroupFile /etc/httpd/conf/groups
Эти команды очень важны: без них сервер не будет знать, где искать пользователей и их пароли.
AuthName
AuthName используется для указания домена аутентификации. Это подсказка пользователям, чтобы они знали, как вводить имя и пароль. Например,
AuthName Authors Only
отображает пользователю подсказку Authors Only при запросе имени и пароля.
AuthType
AuthType предназначена для указания типа аутентификации, используемого для доступа к Web-странццам в перечисленных каталогах. Поскольку единственная доступная для AuthType опция basic, эта директива мало влияет на функционирование текущей версии Apache.
Require
Команда require используется при ограничении доступа пользователям и группам. Команда может использоваться для ограничения доступа пользователей, перечисленных в файле паролей, перечисленных в команде пользователей или для всех перечисленных в команде групп.
Для ограничения доступа любого пользователя, упомянутого в файле паролей, используется следующая команда:
require
valid-user
Для ограничения доступа конкретных пользователей используется формат
require user
usernamel username2 ивегпате3 . ..
Для ограничения доступа членам групп используется строка
require group
groupname1 groupname2 grouрname3 ...
Order
Zeus - последний Web-сервер, рассматриваемый в этой главе. Последняя версия Zeus - 3.3.8 -представляет Web-сервер для Unix/Linux и Macintosh OS X. Он предлагает встроенную поддержку кластеризации, что явно дает серверу потенциальные преимущества для объемных сайтов. Кластеризация позволяет реализовать обслуживание одного Web-адреса несколькими Web-серверами.
Это дает возможность распределить нагрузку запросов по всем серверам группы, а значит обрабатывать большее количество запросов одновременно.
Упомянутые возможности позволили Zeus стать Web-сервером для ряда наиболее загруженных Web-сайтов, включая eBay и British Telecom. Разработки, ориентированные на ядро Linux 2.4, позволяют надеяться на то, что мощность Zeus Web-сервера будет расти. В настоящее время IBM Linux Technology Center считает, что производительность Zeus-серверов для ядра Linux 2.4 почти вдвое выше, чем у серверов на базе ядра Linux 2.2.
Кроме того, Zeus предлагает поддержку ISAPI (API из Internet Information Server фирмы Microsoft) как под Unix, так и под Windows NT/2000. Zeus поддерживает сервлеты (servlet) Java, подобные тем, которые используются в Java Web Server, и предлагает интегрированную связность с базами данных при помощи стандарта доступа к базам данных JDBC.
Zeus предлагает 128-битовое шифрование SSL по всему миру. Из-за того, что Правительство США ограничивает экспорт 128-битовой технологии шифрования, компании США предлагают на экспорт криптографические программные продукты с "ослабленной" 56-битовой кодировкой. Большинство сообщений о взломе шифров программ, таких как Netscape, относились к версиям программ с 56-битовой кодировкой.
Информация о Zeus доступна по адресу www. zeus. со. uk.
На момент написания книги программа Sendmail была поделена на три отдельных RPM-пакета: пакет собственно программ, пакет конфигурационных утилит и пакет документации. Если вы обращаетесь к Sendmail впервые (или впервые конфигурируете программу), вам следует установить все три пакета. Вы можете их установить с CD-ROM, прилагаемого к книге:
$ rpm -i /mnt/cdrom/RedHat/RPMS/sendmail-cf-8.9.3-10.i386.rpm
Не все файлы конфигурации Sendmail по умолчанию инсталлируются при установке Red Hat Linux 7.1.Для полной инсталляции необходимо предварительно монтировать CD-ROM, прилагаемый к книге (например, как /mnt/cdr,om) и выполнить команду rpm для инсталляции двух пакетов.
$ rpm -i /mnt/cdrom/RedHat/RPMS/sendmail-e.11.2-14.1386.rpm
$ rpm -i /mnt/cdrom/RedHat/RPMS/sendmail-cf-e.11.2-14.1386.rpm
Файлы документации Sendmail по умолчанию не инсталлируются при установке Red Hat Linux 7.1. Если у вас нет второго диска Red Hat CD-ROM (к книге он не прилагается), вам придется загрузить пакет sendmail-8.11.2-14.1386. rpm с узла ftp.redhat. com или www. fpmf ind .net. Если он загружен, например, в каталог / trap, то для установки достаточно выполнить команду:
$ rpm -i /tmp/sendmail-doc-8.11.2-14.1386.rpm
Обычно пользователи принимают за систему e-mail программное обеспечение для чтения, создания и отправки сообщений. Таким программным обеспечением может быть почтовый модуль Netscape Communicator, Eudora, Pegasus Mail или pine, но все эти программы просто реализуют удобный интерфейс к системам, которые действительно выполняют работу по маршрутизации и получению почты.
Ни в одном из этих случаев программное обеспечение пользователя фактически не выполняет отправку исходящей или получение входящей почты. Перечисленные программы являются Mail User Agents (MUAs - Почтовыми агентами пользователя). Существует множество разнообразных MUA - на все вкусы. И именно они реализуют пользовательский интерфейс в мир e-mail.
За такими MUA-программами стоят транспортные агенты почты. МТА выполняют доставку, получение и маршрутизацию почтовых сообщений. Все МТА твердо придерживаются некоторых стандартных протоколов (например, Простого Протокола Транспорта Почты, известного как SMTP), которые реализуют систему электронной почты Internet (и систему электронной почты почти каждой сети Unix).
Это различие между MUA и МТА имеет очень большое значение. При установке почтового сервера в сети организации или в любой другой компьютерной сети, необходимо работать именно с транспортными почтовыми агентами.
Дополнительные сведения о различных МТА доступны на странице Linux Electronic Mail Admi-nistrator-HOWTO по адресу http: //www. linuxdoc. org/HOWTO/Mail-Administrator-HOWTO.html.
Концепция транспортного агента почты
Sendmail как основной транспортный агент почты
Конфигурирование Sendmail при помощи m4
В этой главе мы рассмотрим, как с использованием транспортного агента почты Sendmail превратить Linux в почтовый сервер организации.
Необходимость в почтовом сервере возникает тогда, когда связывается множество рабочих станций в сети и необходимо обеспечить для них сервис e-mail. Sendmail позволяет конфигурировать систему Linux для работы в качестве почтового сервера для внутренней переписки, отправки сообщений в Internet и получения сообщений из Internet.
В начале главы рассмотрена концепция МТА (Mail Transport Agent - Транспортный агент почты), затем дан краткий обзор Sendmail, основного МТА в мире Unix, а также некоторых альтернативных программ МТА. В завершение приведены рекомендации по конфигурированию Sendmail.
Программ Qmail является альтернативой Sendmail. Хотя программа Qmail не столь известна, как smail, она выполняет некоторые функции, делающие ее конкурентоспособной на рынке МТА.
Разработчик Qmail обратил особое внимание на реализацию функций защиты. За последние годы в Sendmail обнаружен ряд ошибок в защите, которые впоследствии были исправлены. Философия Qmail состоит в том, чтобы сделать все возможное для исключения скрытых изъянов в системе безопасности, поскольку почта постоянно открыта для попыток взлома.
Qmail также пытается сделать процесс доставки настолько надежным, насколько это возможно, с форматом почтового ящика, более устойчивым к сбоям в работе системы при помещении сообщения в почтовый ящик.
Qmail выполняет и обычные функции, характерные для традиционных МТА: пересылка, использование псевдонимов, списки рассылки, управление загрузкой и т.п.
Домашняя страница Qmail - http: //www.qmail.org. На ней приведен список коммерческих организаций, обеспечивающих необходимую поддержку.
Похоже, наиболее популярным МТА в мире Unix является программа Sendmail. Эта программа определяет почтовую систему, которая обеспечивает связь с Internet, поддерживая привычную адресацию
(username@some. domain)
и предоставляя стандартные услуги (такие, как автоматическая пересылка почты).
Являясь наиболее популярной программой, Sendmail вырос до самого мощного и сложного МТА систем Unix. Фактически, конфигурирование и управление системой Sendmail может быть настолько сложным в большой организации, что данному вопросу следовало бы посвятить целую книгу.
В главе обращено внимание на конфигурирование и использование Sendmail потому, что именно эта программа является МТА по умолчанию в Red Hat Linux, впрочем, как и в сетях Unix.
Предупреждение
В главе дан общий обзор программы Sendmail и задач ее конфигурирования. Чтобы получить более подробные сведения, обратитесь на Web-сайт www. sendipail. org.
Для начала коротко рассмотрим некоторые альтернативные МТА для Linux.
Sendmail может быть основным транспортным агентом почты в Unix, но в мире Linux чаще используется как МТА программа smail. Отконфигурировать smail проще, чем Sendmail (хотя не всегда). Программа smail обеспечивает те же функции с поддержкой SMTP и UUCP, что делает возможным ее использование в качестве интерактивного почтового сервера.
Пакет smail не входит в состав Linux Red Hat 7.1, в качестве МТА по умолчанию используется Sendmail. Для загрузки последней версии smail обратитесь по адресу ftp: / / ftp. planix. com/ pub/Smail/ или поищите после днюю версию пакета RPM по адресу http: //www.rpmfind.net.
Теперь можно посмотреть на файл конфигурации интерактивного (online) почтового сервера. Интерактивный почтовый сервер легче конфигурировать и понять, чем серверы, работающие в режиме off-line.
Примечание
Несмотря на то, что программа т4 облегчает конфигурирование Sendmail, количество ее опций огромно. В этой главе рассмотрены только те опции, с которыми работают файлы конфигурации. Примеры конфигурационных файлов расположены в подкаталогах каталога /usr/share/sendmail-cf. Созданный вами конфигурационный файл Sendmail располагается В каталоге /usr/share/sendmail-cf/cf.
Интерактивный почтовый сервер является почтовым сервером сети, соединенной с Internet по выделенной линии. Когда отправитель извне направляет почтовое сообщение пользователю локальной сети, оно может быть доставлено непосредственно адресату, а когда пользователь сети посылает письмо, оно отправляется немедленно.
Чтобы направить входящие сообщения к почтовым ящикам пользователей или отправить сообщения, созданные пользователями, необходимо соответствующим о'бразом отконфигурировать Sendmail. Ести существуют препятствия для доставки сообщений, например отсутствие соединения с Internet сообщения будут поставлены в очередь для отправки после установления связи с Internet.
Файл конфигурации, созданный в т4, подобен следующему:
include('../m4/cf.m4')
OSTYPE(4inux' )
undefine("UUCP_RELAY')dnl
undefine('BITNET_RELAY')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
MAILER(local)dnl
MAILER(smtp)
Примечание
Внимательно отнеситесь к апострофам (одиночным кавычкам) в конфигурационных файлах m4. Первая (открывающая) кавычка - всегда обратная ("), расположенная на стандартной клавиатуре над клавишей Tab. Вторая (закрывающая) кавычка (') - обычный апостроф (одиночная кавычка).
Рассмотрим каждую строку этого файла конфигурации.
Строка 1. include (`
..
/m4/cf .m4') Это общие файлы конфигурации, необходимые для того, чтобы сформировать файл конфигурации Sendmail,