Boa - установка и использование

В настоящее время Boa разрабатывается и тестируется на GNU/Linux/i386. Его код является открытым (в большей степени, чем код других серверов), поэтому он должен легко запускаться на большинстве современных Unix-подобных платформ. Последняя версия Boa работает на FreeBSD, SunOS 4.1.4, GNU/Linux-SPARC, и HP-UX 9.0. Он может не работать на версии ядра Pre-1.2.0 GNU/Linux, так как имеются трудности с реализацией mmap().

Установить Boa очень просто:

Распакуйте

  1. Выберите подходящий для пакета каталог, и выполните cd в него.
  2. tar -xvzf boa-0.94.tar.gz,
    или, для тех, у кого устаревшая (non-GNU) версия tar
    gzip -cd < boa-0.94.tar.gz | tar -xvf -
  3. Читайте документацию. Серьёзно...

Сборка

  1. Выполните cd в src каталог.
  2. (опционально) Измените значение по умолчанию SERVER_ROOT путём установки макроса #define в верхней части файла src/defines.h
  3. Введите команды ./configure; make
  4. О любых ошибках сообщайте в группу поддержки, или устраняйте их сами.

Конфигурирование

  1. Выберите пользователя и порт, под которыми будет работать Boa. Традиционно, порт - 80, а пользователь - nobody (создайте его, если это необходимо) зачастую это - лучший выбор, с точки зрения безопасности. Если у Вас нет (или Вы решили не использовать) привилегии root, то Вы не можете использовать порты, с номерами, меньшими чем 1024, и не можете переключать ID пользователя.
  2. Выберите корневую директорию сервера. Директория conf внутри server root Должна содержать копию файла конфигурации boa.conf>.
  3. Выберите место для log-файлов, программ CGI (если они будут), и базу для Вашего дерева URL.
  4. Укажите местоположение файла mime.types.
  5. Отредактируйте файл conf/boa.conf> в соответствии с выбором, который Вы сделали (этот файл очень хорошо задокументирован). Просмотрите весь этот файл для того, что бы увидеть все другие особенности, которые можно конфигурировать.

Запуск

Запустите Boa. Если в двоичном файле boa Вы не указали правилный SERVER_ROOT, то Вы можете задать его в командной строке с помощью опции -c line with the -c option (командная строка имеет приоритет).

Пример: ./boa -c /usr/local/boa

Тестирование

В этот момент сервер должен работать и обслуживать запросы документов. Если это не так, проверьте log-файл, который даст ключ к разгадке проблемы.

Установка

Скопируйте двоичный файл в безопасное место и поместите вызов boa в системный стартовый скрипт. Используйте здесь ту же самую опцию -c, которую использовали при первоначальном тестировании.

2 Файлы, используемые Boa

boa.conf

Этот файл - единственный конфигурационный файл для Boa. The directives in this file are defined in the DIRECTIVES section.

mime.types

MimeTypes <filename> определяет, что будет передавать Boa в поле Content-Type HTTP/1.0 или старше транзакций.

3 Опции компиляции и командной строки

SERVER_ROOT

Корень по умолчанию определяется посредством #defined для SERVER_ROOT в файле defines.h и может быть переопределён в командной строке опцией -c. В папке server root должна храниться локальная копия конфигурационного файла boa.conf.

Пример: /usr/sbin/boa -c /etc/boa

4 Директивы boa.conf

Конфигурационный файл Boa разбирается парсером, сгенерированным утилитами lex/yacc или flex/bison. Если появляется сообщение об ошибке, то в нём будет представлен номер строки, содержащей ошибку, что облегчает поиск места ошибки. Синтаксис всех этих правил очень прост, они могут появляться в любом порядке. Где возможно, эти правила подражают аналогичным из NCSA httpd 1.3; я (Paul Phillips) не вижу причин для ничем не вызванных отличий.


Замечание:

Параметра "ServerRoot" в этом конфигурационном файле нет. Его можно компиллировать внутри сервера (см. defines.h) или задать в командной строке с помощью опции -c

Директивы, содержащиеся в файле boa.conf, большинство, но не все, являются обязательными.

Port <integer>

Это порт, на котором работает Boa. Для http серверов, портом по умолчанию, является 80. Если это значение меньше 1024, то сервер должен запускаться с привилегиями root.

Listen <IP>


Интернет адрес, используемый в вызове bind(2). Если Вы раскомментируете эту строчку, то вместо произвольного адреса (INADDR_ANY) будет использоваться указанный адрес. Вы можете использовать только одну директиву "Listen". Если Вы желаете использовать несколько IP адресов, то у Вас есть две возможности:

  1. Запустить boa без директивы "Listen"
    1. Все адреса трактовать одним образом; что имеет смысл для localhost, ppp, и eth0.
    2. Использовать директиву VirtualHost ниже точки запроса к различным файлам. Это хорошо подходит для очень большого количества адресов (клиенты веб-хостинга).
  2. Запускать по одному экземпляру boa для каждого IP адреса, каждый со своей собственной директивой "Listen". Не слишком большие накладные расходы для нескольких десятков IP адресов. Отличное разделение между клиентами. Имя хоста, которое Вы задаёте, обрабатывается inet_aton(3), поэтому Вы должны использовать запись в виде четырёх чисел, разделённых точками. Такая конфигурация слишком важна для доверия некоторых DNS.

User <Имя пользователя или UID>

Имя пользователя, или его UID, под которым будет запускаться сервер. В случае Boa, сервер должен запускаться как root.

Group <имя группы или GID>

Имя группы, или GID, под которым будет запускаться сервер. В случае Boa, сервер должен запускаться как root.

ServerAdmin <email адрес>

email адрес, по которому будут отсылаться письма с сообщениями о проблемах на сервере. Примечание: в настоящее время не используется.

ErrorLog <имя файла>

Место расположения файла error log. Если это имя не начинается с '/', то оно рассматривается относительно server root. Задайте его в виде /dev/null если Вы не хотите вести протокол ошибок.

AccessLog <имя файла>

Место расположения файла access log. Если это имя не начинается с '/', то оно рассматривается относительно server root. Закомментируйте его, или задайте его в виде /dev/null если Вы не хотите вести протокол доступа.

VerboseCGILogs

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

CgiLog <имя файла>

Местоположение файра регистрации ошибок CGI. Если задан, то он будет являться тем файлом, куда будет перенаправлен stderr CGI скриптов. В противном случае, запись в stderr будет отправлена в мусорную корзину.

ServerName <имя сервера>

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

VirtualHost

Это логический переключатель, который не имеет никаких параметров. Закомментируйте его для запрета виртуальных хостов. Given DocumentRoot /var/www, requests on interface `A' or IP `IP-A' become /var/www/IP-A. Example: http://localhost/ becomes /var/www/127.0.0.1

DocumentRoot <каталог>

Корневой каталог для документов HTML. Если не начинается с '/', то рассматривается относительно server root .

UserDir <каталог>

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

DirectoryIndex <имя файла>

Имя файла, который будет использоваться в качестве предварительно записанного HTML индекса каталога. Пожалуйста, создайте и используйте этот файл! Создание этого файла "на лету" может замедлить работу сервера.

DirectoryMaker <полный путь к программе>

Имя программы, которая будет использоваться для генерирования индекса каталога "на лету". Эта программа должна принимать один или два аргумента командной строки. Первый задаёт абсолютный адрес каталога, подлежащего индексированию, а второй (не обязательный) - должен быть "заголовком" документа. Закомментируйте, если не желаете создавать индексы "на лету". Если <полный путь к программе> не начинается с '/', то он рассматривается относительно server root.

DirectoryCache <каталог>

DirectoryCache: Если индекс данного каталога не существует, а DirectoryMaker был закомментирован, то тогда для построения индекса каталога можно использовать сам Boa. Предупреждаю: построенный индекс предельно минималистичен и может стать причиной задержек, если используется медленный диск. Замечание: DirectoryCache должен быть доступен на запись тому же пользователю/группе, под которой был запущен Boa.

KeepAliveMax <целое>

Количество запросов KeepAlive, разрешённое для одного соединения. Закоментируйте, или задайте нулевое значение, для запрета обработки запросов KeepAlive.

KeepAliveTimeout <целое>

Количество секунд ожидания до того, как соединение keepalive будет считаться в состоянии таймаута.

MimeTypes <файл>

Место расположения файла mime.types. Если не начинается с '/', то оно рассматривается относительно server root. Закомментируйте, что бы избежать загрузки mime.types (Лучше использовать AddType!).

DefaultType <mime тип>

Тип MIME, используемый, если невозможно определить MIME тип по расширению файла.

AddType <тип mime> <расширение> расширение...

Связывает MIME-тип с расширением или расширениями.

Redirect, Alias, и ScriptAlias <каталог1> <каталог2>

Redirect, Alias, и ScriptAlias all имеют одну и ту же семантику - они находят соответствие в начале запроса и выполняют действие. Используется Redirect для переадресации запроса на другой сервер, Alias - на том же самом сервере и ScriptAlias для использования каталогов, содержащих исполняемые скрипты.

Redirect

Позволяет Вам сообщить клиенту о том, что запрошенный документ существует в Вашем пространстве имён, но его уже нет на сервере. Это позволяет сообщить клиенту, где искать перемещённый документ.

Alias

Делает один путь псевдонимом другого. Разумеется, символические ссылки в файловой системе тоже поддерживаются.

ScriptAlias

Назначает виртуальный путь на реальный каталог, содержащий сервисные скрипты.

Безопасность

Boa спроектирован для использования существующих систем безопасности файловых систем. В файле boa.conf, директивы USER и GROUP определяют кого считать запустившим Boa, если его запустил root. По умолчанию, это пара nobody/nogroup. Это разрешает совсем немного гибкости. Например, если Вы желаете запретить доступ ко всем посторонним каталогам или файлам, просто сделайте их недоступными для nobody/nogroup. Если пользователь, под которым работает Boa, называется "boa" и его группа - "boa", входит в группу "web-stuff", то файлы/каталоги доступные пользователям группы "web-stuff", будут так же доступны Boa.

В феврале 2000 hoo-rah, советник из CERT CA-2000-02 немного поработал с Boa. Начиная с версии 0.94.4, правила эскейпинга в Boa Стали немного яснее. Но они не были такими уж плохими ранее. Примеры CGI программ были обновлены, для того, что бы показать, что здесь необходимы усилия. Если Вы пишите, сопровождаете, или используете CGI программы под Boa (или любым другим сервером), это представляет ценность для Вас, пока Вы читаете и понимаете эти советы. Однако, реальная проблема ужимается до браузеров, а дизайнеры веб-страниц навешивают всё новые рюшечки на содержимое и безопасность. Браузеры, лидирующие по продажам, предполагают (некорректно), что все веб-страницы заслуживают доверия.