Книга: Linux-сервер своими руками

12.2.1. Файл httpd.conf

12.2.1. Файл httpd.conf

Как уже отмечалось ранее, этот файл содержит практически все директивы, необходимые для работы сервера. Директивы конфигурационного файла сервера Apache можно условно разделить на такие группы:

1.  Общие. К общим директивам относятся глобальные директивы, влияющие на работу всего Web-сервера. Это директивы ServerName, ServerType, Port, User и Group, ServerAdmin, ServerRoot, PidFile, DocumentRoot, UserDir.

2. Директивы протоколирования: ErrorLog, TransferLog, HostnameLookups.

3. Директивы ограничения доступа: AllowOverride, Options, Limit.

4. Директивы управления производительностью: StartServers, MaxSpareServers, MinSpareServers, а также директива CacheNegotiatedDocs.

5. Директивы обеспечения постоянного соединения с клиентом: Timeout, KeepAlive, KeepAliveTimeout.

6. Директивы настройки отображения каталога. Оформить отображение каталогов можно с помощью директив настройки отображения каталогов: DirectoryIndex, FancyIndexing и AddIconByType.

7. Директивы обработки ошибок. Директивой обработки ошибок HTTP-сервера является директива ErrorDocument. С ее помощью можно установить реакцию на любую ошибку сервера, например, на ошибку 404 (документ не найден).

8. Директивы перенаправления: Redirect, Alias и ScriptAlias.

9. Директивы для работы с многоязычными документами: AddLanguage и LanguagePriority.

10. Директивы обработки MIME-типов. Настроить свой сервер для обработки различных MIME-типов можно с помощью директив DefaultType, AddEncoding, AddType, AddHandler и Action.

11. Директивы создания виртуальных узлов: VirtualHost, Listen, BindAddress.

Все эти директивы редактировать вам вряд ли придется — нужно будет задать только значения директив ServerName и ServerAdmin. По умолчанию остальные директивы содержат вполне разумные значения. Далее приведено описание директив, используемых в файле httpd.conf.

ServerName — директива, которая определяет имя сервера Apache. Причем, здесь должно быть задано официальное имя сервера в таком виде, в котором оно должно появляться в адресной строке браузера. Данное имя должно быть зарегистрировано на сервере DNS вашей сети.

ServerType — директива, которая определяет тип сервера. По умолчанию используется значение standalone. Если вы хотите достичь максимальной производительности вашего Web-сервера, не изменяйте эту опцию.

Сервер Apache для каждого соединения запускает отдельную копию, которая будет обрабатывать запросы клиента. Управлять запущенными копиями позволяют директивы StartServers, MinSpareServers, MaxSpareServers.

StartServers, MaxSpareServers, MinSpareServers. Как уже отмечалось выше, для каждого нового соединения создается новая копия процесса сервера. Директива StartServers задает количество копий, которые будут созданы при запуске исходной копии сервера. При этом исходная копия сервера получает запросы и передает их свободным копиям. Это позволяет равномерно распределить нагрузку между отдельными процессами и повысить производительность сервера, однако на практике все не так хорошо, как хотелось бы. Существенного прироста производительности можно добиться только в случае большой загрузки сервера. По умолчанию запускается пять копий сервера.

Если число поступающих запросов превышает количество запущенных копий сервера, запускаются дополнительные процессы-серверы. Эти процессы не завершаются после обработки своего запроса, а продолжают находиться в памяти. Директива MaxSpareServers позволяет указать максимальное число таких процессов. Если это количество превышено, то лишние процессы завершаются. Если количество «серверов на подхвате» меньше, чем задано директивой MinSpareServers, запускаются дополнительные копии.

Для работы этих директив необходимо, чтобы сервер был запущен в автономном режиме.

Port — директива, задающая номер порта, который будет использоваться для установки соединения. По умолчанию используется порт 80. Если вы хотите запустить сервер Apache с использованием этого или любого другого порта, номер которого меньше 1024, вы должны обладать правами суперпользователя. Но даже если у вас нет таких прав, вы можете запустить сервер для работы с портом, номер которого превышает значение 1024. Обычно используется номер 8080 или 8000.

HostnameLookups on|off. Сервер apache ведет журнал доступа других компьютеров. Если вы включите данную опцию (on), то в журнал будет записано доменное имя компьютера-клиента. Если эта опция выключена (off), в журнал будет записан IP-адрес клиента. Включение данной опции замедляет работу сервера, так как требуется дополнительное время на ожидание ответа от сервера DNS.

User и Group. Директивы User и Group определяют идентификаторы пользователя и группы, от имени которых будет работать сервер. Данные идентификаторы присваиваются серверу, если он запущен в автономном режиме. Можно использовать как имена пользователей, так и их числовые эквиваленты — UID. По умолчанию используется имя пользователя nobody. Из соображений безопасности не рекомендуется изменять это значение и присваивать имя реального пользователя. В этом случае Web-сервер получит доступ только к тем файлам, которые разрешены для чтения всем пользователям. Нужно заметить, что указанный пользователь и группа должны существовать в вашей системе. Ни в коем случае не запускайте сервер от имени пользователя root!

ServerAdmin — директива, которая задает электронный адрес Web-мастера вашего Web-узла. Если возникнут какие-то проблемы, связанные с работой сервера, то по этому адресу будет отправлено соответствующее сообщение. Обычно используется значение webmaster@Your_Host.com. Пользователь webmaster, как правило, не существует реально в системе. Для определения имени (псевдонима) webmaster используется файл псевдонимов электронной почты /etc/aliases. Данный файл используется для определения псевдонимов пользователей (см. приложение А). Формат файла /etc/aliases следующий:

псевдоним: имя

После модификации этого файла нужно ввести команду newaliases. Данную команду нужно вводить, зарегистрировавшись в системе как суперпользователь.

ServerRoot — в этой директиве указывается местонахождение файлов конфигурации сервера Apache. По умолчанию для этих целей используется каталог /etc/httpd.

BindAddress. Данная директива используется для поддержки виртуальных хостов и применяется для сообщения серверу, какой IP-адрес следует прослушивать. Значением данной директивы может быть «*» (любой адрес), IP-адрес или полное имя домена.

ErrorLog и TransferLog — эти директивы определяют расположение журналов сервера Apache. Обычно для этих целей используется каталог /etc/httpd /logs, который является ссылкой на каталог /var/log/httpd или на любой другой. В журнале errorlog протоколируются диагностические сообщения, а также сообщения об ошибках, которые порождают CGI-сценарии. В журнале transferlog протоколируются запросы клиентов. Если включена директива HostNameLookups, то вместо IP-адреса клиентов будут регистрироваться имена компьютеров.

PidFile — с помощью этой директивы указывается имя файла, в котором исходный процесс сервера будет регистрироваться. Этот файл содержит свой идентификатор процесса (PID). Данную информацию можно использовать для останова или перезапуска сервера при написании собственных сценариев. Данный файл будет создан, только если сервер Apache запущен в автономном режиме.

CacheNegotiatedDocs — данная директива позволяет прокси-серверу, например SQUID, не кэшировать документы, которые не генерируются автоматически, то есть в процессе выполнения различных сценариев. Согласно протоколу НТТР/1.0, сервер Apache с каждым пакетом посылает заголовок Pragma: no-cache прокси-серверу, что позволяет отключить кэширование документов (в протоколе НТТР/1.1 вместо Pragma используется Cache-Control). Если вы включите данную директиву, то вы разрешите прокси-серверу кэшировать документы. К сожалению, далеко не все прокси-серверы отключают кэширование после получения данного заголовка. При написании своего CGI-сценария, вам, скорее всего, придется самому выводить заголовок Pragma (или Cache-Control) и мета-тэги, которые указывают на дату последнего обновления документа.

Timeout — задает промежуток времени в секундах, в течение которого сервер продолжает попытки возобновления приостановленной передачи данных. Значение директивы Timeout распространяется не только на передачу, но и на прием данных. Если вам нужно получать большие файлы, рекомендую увеличить данное значение.

KeepAlive — разрешает постоянные соединения, то есть такие соединения, в которых производится более одного запроса за один раз.

KeepAliveTimeOut — данная директива определяет тайм-аут для постоянного соединения.

MaxClients. Иногда поступающих запросов настолько много, что компьютеру не хватает ресурсов для загрузки новых копий сервера в память и их выполнения. Директива MaxClients (значение по умолчанию — 150) определяет максимальное число копий сервера, которые могут выполняться одновременно.

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

Listen — позволяет вам связывать Apache с определенным IP-адресом и (или) дополнительными портами.

DocumentRoot — директива, определяющая местонахождение корневого каталога документов вашего сервера.

UserDir — эта директива задает названия подкаталога в домашнем каталоге пользователя, из которого берутся документы. В этом случае, вы активизируете возможность использования пользовательских каталогов. Если вы не хотите включать эту возможность, укажите UserDir DISABLED. Более подробно эта директива будет рассмотрена позже.

DirectoryIndex — позволяет задать название документа, который будет возвращен по запросу, который не содержит имя документа. С помощью данной директивы можно задать несколько имен файлов. Значениями по умолчанию являются index.html index.php index.htm index.shtml index.cgi Default.htmdefault.htm index.php3. Например, если вы введете в строке адреса браузера http://localhost, то будет возвращен один из указанных в директиве DirectoryIndex документов.

FancyIndexing. При получении запроса, не содержащего имя документа, сервер передаст один из файлов, указанных в директиве DirectoryIndex. Если такой файл не существует, клиенту будет возвращено оглавление каталога. При включении директивы FancyIndexing, в оглавлении каталога будут использованы значки и описания файлов. Если директива FancyIndexing выключена, оглавление будет представлено в более простом виде.

AddIconByType — сопоставляет значок с типом файла. Значок будет использоваться при выводе каталога, если включена директива FancyIndexing. Директива AddIconByType имеет следующий формат:

AddIconByType (TEXT, URL) mime-type

Параметр TEXT определяет текстовое описание типа, которое увидят пользователи, использующие текстовый браузер или пользователи, у которых отключено отображение рисунков. Параметр URL определяет адрес значка, а параметр mime-type — это тип файла, с которым нужно сопоставить значок. Полный перечень MIME-типов приведен в файле apache-mime. types. В качестве имени файла можно задать не только MIME-тип, но и символы, которыми заканчивается имя файла (см. листинг 12.1), но для этого нужно использовать директиву AddIcon вместо AddIconByType.

Листинг 12.1. Фрагмент файлаhttpd.conf

AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe

Первая директива в листинге сопоставляет типу video значок /icons/movie.gif. Вторая директива сопоставляет бинарным файлам *.bin и *.ехе значок /icons/binary.gif. Значок по умолчанию задается директивой DefaultIcon.

DefaultType. Если запрашиваемый клиентом тип не соответствует ни одному из MIME-типов, используется MIME-тип, указанный в директиве DefaultType.

AddEncoding. Для сокращения времени передачи файла клиентам используется сжатие данных. Браузеры имеют встроенные программы для распаковки, запускаемые при получении архивов определенных MIME-типов. Именно эти MIME-типы и указываются в директиве AddEncoding.

AddLanguage. В большинстве браузеров можно задать предпочитаемый язык. Благодаря этому вы можете предоставлять документы на разных языках.

Директива AddLanguage сопоставляет расширение файла аббревиатуре языка. Для русского языка используется аббревиатура ru , для английского — еп.

При этом в корневом каталоге вашего сервера могут находиться несколько индексных файлов на разных языках. Например, для русского языка нужно использовать имя файла index.html.ru, а для английского — index.html.en. LanguagePriority. Если на вашем сервере размещены документы на разных языках, то с помощью директивы LanguagePriority можно указать приоритеты различных языков. Например, вы установили директиву LanguagePriority так:

LanguagePriority en ru

Клиент вводит в строке адреса своего браузера адрес http://www.server.com//. Если в свойствах браузера имеется возможность задать предпочитаемый язык, то возвращен будет файл на нужном языке, если такой существует. Если браузер клиента не поддерживает такую возможность, будет возвращен файл на языке, имеющим наиболее высокий приоритет. В рассмотренном случае (см. пример) это английский язык. Если файл на нужном языке, например, на немецком, не существует, то будет возвращен файл на английском языке. Для того, чтобы сервер поддерживал нужный вам язык, предварительно установите правильное значение директивы AddLanguage.

Redirect. Используйте директиву Redirect, когда нужно перенести документы в другой каталог или на другой сервер. Например, вам нужно перенести данные из каталога /users/den в каталог /den. Если при этом старый URL-адрес был http://www.host.com/users/den, то новый станет http://www.host.com/den/. Используйте для этого следующую директиву:

Redirect /users/den /den

Можно также перенаправить запрос на другой сервер:

Redirect /users/den/ www.den.domain.com

При этом допускается использование как нового, так и старого URL-адреса.

Alias — с помощью директивы Alias можно предоставить доступ не только к файлам, находящимся в каталоге, указанном директивой DocumentRoot и его подкаталогах, но и в других каталогах. По умолчанию определен только псевдоним для каталога /icons.

ScriptAlias — аналогична директиве Alias, но позволяет задать месторасположение каталога для CGI-сценариев.

AddType — с помощью этой директивы можно добавить новый MIME-тип, который не указан в файле apache-mime, types.

AddHandler и Action. Директива AddHandler позволяет сопоставить определенному MIME-типу какой-нибудь обработчик. А с помощью директивы Action можно определить какое-нибудь действие для обработчика. Например, вы можете запустить какую-нибудь программу для обработки файла данного типа. Использование этих директив, я думаю, лучше всего продемонстрировать на примере (см. листинг 12.2).

Листинг 12.2. Применение директив Add Handler и Action

AddHandler text/dhtml dhtml
Action text/dhtml /cgi-bin/dhtml-parse

ErrorDocument — директива, сопоставляющая коды ошибок сервера URL-адресам на этом же сервере.

Теперь рассмотрим директивы управления доступом к отдельным каталогам. Данные директивы очень похожи на блочные директивы сервера ProFTPD, которые обсуждались в предыдущей главе.

Directory — обычно определяет свойства каталога (см. листинг 12.3).

Листинг 12.3. Директива Directory

<Directory />
Options Indexes Includes FollowSymLinks
AllowOverride None
</Directory>

Свойства каталога можно указывать в директиве Directory или в файле .htaccess, который находится в том каталоге, для которого необходимо установить нужные параметры.

В блоке Directory могут находиться директивы управления доступом. К ним относятся директивы AllowOverride, Options, Limit. Рассмотрим по порядку все эти директивы. Директива AllowOverride может принимать значения, указанные в табл. 12.1.

Значения директивы AllowOverride Таблица 12.1 

Значение Описание
None Сервер Apache будет игнорировать файлы .htaccess. Рекомендую установить данную опцию, так как это повысит производительность сервера
All Пользователи имеют право переопределять в файлах .htaccess глобальные параметры доступа. Из соображений безопасности лучше не использовать этот режим
Options Разрешает использовать директиву Options
Limit Разрешает использовать директиву Limit
AuthConfig Разрешает использование директив AuthName, AuthType, AuthUserFile и AuthGroupFile
FileInfo Разрешает использовать в файлах .htaccess директивы AddType и AddEncoding

С помощью директивы Option sможно определить функции сервера, которые будут доступны для использования в определяемом каталоге. Данную директиву можно использовать как в файле httpd.conf, так и в файлах .htaccess. Допустимые опции для директивы Options представлены в табл. 12.2.

Limit метод. Директива Limit ограничивает доступ к файлам в определенном каталоге.

Параметр метод определяет метод передачи, например, GET или POST. Директиву Limit можно использовать внутри блоков Directory, Location или в файле .htacccess.  

Допустимые опции директивы Options Таблица 12.2

Опция Описание
None He разрешается использование каких-либо функций
All Разрешаются все функции
FollowSymLinks Разрешается использовать символические ссылки. С точки зрения безопасности не рекомендуется использовать этот режим
SymLinkslfOwnerMatch Разрешается использование символических ссылок, если ссылка указывает на объект, который принадлежит тому же пользователю, что и ссылка
ExecCGI Разрешается выполнение CGI-сценариев
Indexes Если эта опция выключена, сервер не будет передавать содержимое каталога при отсутствии файла index.html
Includes Разрешено использование серверных включений. Рекомендую отключить эту опцию, поскольку это сильно нагружает сервер
IncludesNoExec Разрешает использование серверных включений, но запрещает запуск из них внешних программ

Примечание. В интерфейсе CGI (Common Gateway Interface) определены два метода передачи данных пользователя сценарию: Get и Post. Метод передачи определяется в форме передачи данных. Например:

<form action=script.cgi method=GET>

Сервер Apache позволяет ограничить с помощью директивы Limit передачу данных одним из этих методов.

В блоке Limit можно использовать такие директивы: allow (разрешить), deny (запретить), order (порядок), require (требуется). Директивы allow и deny аналогичны директивам allow и deny файла конфигурации сервера ProFTPD. После директивы allow следует слово from, после которого можно указать IP-адрес, адрес сети, домен или просто имя компьютера. Слово all обозначает все компьютеры. Например, вам требуется запретить доступ всем компьютерам, кроме компьютеров, которые входят в домен ru (см. листинг 12.4).

Листинг 12.4. Директивы allow, deny

order deny, allow
deny from all
allow from ru

Следующий пример показывает, как разрешить доступ компьютерам только из вашей сети (см. листинг 12.5). Пусть, при этом, ваша сеть имеет адрес 192.168.1.0

Листинг 12.5. Разрешения доступа подсети 192.168.1.0

order deny, allow
deny from all
allow from 192.168.1.

Директива order определяет порядок выполнения директив allow и deny. Кроме значений allow, deny и deny, allow, директива order может содержать значение mutual-failure. В этом случае доступ будет отказан всем компьютерам, которые явно не указаны в списке allow.

Директиву require можно использовать для защиты каталога паролем. После названия директивы должен следовать список элементов: имена пользователей, групп, которые заданы в директивах AuthUserFile и AuthGroupFile. Можно использовать параметр valid-user, который укажет серверу предоставить доступ любому пользователю, имя которого имеется в директиве AuthUserFile, если он введет правильный пароль. Пример использования директив Limit, require, AuthUserFile приведен в листинге 12.6.

Листинг 12.6. Использование директивы require

<Directory *>
 AuthUserFile /var/secure/.htpasswd
 AuthName Security
 AuthType Basic
 <Limit GET>
  order deny,allow
  deny form all
  allow from mydomain.ru
  require valid-user
 </Limit>
</Directory>

В листинге 12.6 для аутентификации используется файл паролей .htpasswd, который можно создать с помощью программы htpasswd. Директива Limit разрешает доступ к любому каталогу сервера только пользователям домена mydomain.ru.

Кроме параметра valid-user допускается использование параметра users или grpoups. Данные параметры разрешают доступ только определенным пользователям или группам пользователей. Пример использования параметра users приведен в листинге 12.7.

Листинг 12.7. Применения параметра users

<Directory /users>
 AuthType Basic
 AuthUserFile /var/users/ .htpasswd
 AuthName UsersDir
 <Limit GET POST>
  require users denis igor evg
 </Limit>
</Directory>

Location — с помощью этой директивы можно задать определенный URL-адрес, который предназначен для обозначения каталогов, файлов или групп файлов. Обозначить группу файлов можно с помощью шаблонов, например, шаблон *.html определяет все файлы, имена которых заканчиваются на .html. В URL-адрес не включается протокол и имя сервера. Пример описания блока Location представлен в листинге 12.8.

Листинг 12.8. Блок Location

<Location URL>
 директивы управления доступом
</Location>

Оглавление книги


Генерация: 1.058. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз