Bozohttpd

Материал из wiki.lissyara.su
Перейти к: навигация, поиск

НАЗВАНИЕ

bozohttpd -- демон передачи гипер текста версия 1.1

СИНТАКСИС

bozohttpd [-HVXbefnrus] [-C суффикс cgi дескриптора] [-I порт]
[-M суффикс типа кодировки encoding11] [-S программное_обеспечение_сервера]
[-c cgibin] [-i адрес] [-p публичная_директория] [-t chroot_директория]
[-v виртуальная_корневая_директория] [-x индекс] [-Z сертификационный частный_ключ] slash_директория [моё_имя]

ОПИСАНИЕ

Программа bozohttpd читает HTTP запросы со стандартного ввода, и отправляет ответ в стандартный вывод. Кроме того, осуществляется поддержка ~пользовательской трансляции и виртуального хостинга (смотрите ниже), все файловые запросы происходят со slash_директории. Сервер использует моё_имя в качестве своего имени, которое, по умолчанию, является именем localhost компьютера, получаемого от gethostname(3) (но обратите внимание на опцию -v виртуального хостинга.) bozohttpd записывает логи в syslog(3) используя ftp (но обратите внимание на опцию -s для тестов.) bozohttpd сочетает в себе маленький размер, простоту и малое наличие настроек, и мы надеемся это позволило увеличить безопасность.
ОПЦИИ
Доступны следующие опции:
-b
Эта опция включает режим демона, в котором bozohttpd не зависит от текущего терминала, запускается в фоновом режиме и обслуживает HTTP запросы.
-C суффикс cgi дескриптора
Эта опция добавляет новую программу CGI дескрипторов для различных видов файлов. Суффикс должен быть любым нормальным файловым суффиксом, а cgi дескрипторы должны содержать полный путь к интерпретатору. Эта опция - всего лишь способ включения запуска CGI программ расположенных за пределами cgibin директории. Допустимы множественные -C опции.
-c cgibin
Эта опция включает CGI/1.1 интерфейс. Подразумевается, что директория cgibin содержит пригодные для использования CGI программы. bozohttpd ожидает URL'ы в форме /cgi-bin/<название_сценария>, где <название_сценария> исполняемая CGI программа в CGI директории. Другими словами, все CGI URL'ы должны начинаться с /cgi-bin/. Помните, что CGI/1.1 интерфейс не доступен с ~пользовательской трансляцией.
-e
Эта опция указывает bozohttpd не очищать окружение при работе с опциями -t или -U.
-f
Эта опция останавливает флаг -b, отсоединяет bozohttpd от терминала и отправляет его (bozohttpd) в фоновый режим.
-H
Эта опция указывает индексному режиму директории скрывать файлы и директории запускающиеся периодически, за исключением ... Смотрите также -X.
-I порт
Эта опция доступна только вместе с опцией -b. Помечает порт как связанный с демоном. По умолчанию, это "http" порт.
-i адрес
Эта опция доступна только вместе с опцией -b. Помечает адрес как связанный с демоном. Если в противном случае неопределён, адрес используемый для связки берётся из моё_имя, который по умолчанию возвращается от gethostname(3). Используется только последняя -i опция.
-M суффикс типа кодировки encoding11
Эта опция добавляет новую запись в таблицу, содержащую данные конвертации суффиксов файлов в тип содержимого и кодировку. Эта опция принимает четыре дополнительных аргумента, содержащих префиксы файла, они могут быть следующими: "Content-Type", "Content-Encoding" и "Content-Encoding" для HTTP/1.1 соединений соответственно. Если вместо них (аргументов) будет тире ("-"), то будет использоваться пустая строка. Также можно использовать множественные -M опции.
-n
Эта опция указывает bozohttpd не преобразовывать IP адреса в расширение имён для значения переменной REMOTE_HOST перед запуском CGI программы. Эта опция используется с опцией -c.
-p публичная_директория
Эта опция изменяет директорию пользователя по умолчанию для /~user/ трансляции с "public_html" на публичную_директорию.
-r
Эта опция форсирует страницы, кроме "index.html" (смотрите опцию -X) страницы, требовать реферера (страницы с которой пришёл пользователь): должен присутствовать заголовок и рефер к этому web серверу, в противном случае будет возвращено перенаправление на страницу "index.html".
-S программное_обеспечение_сервера
Эта опция устанавливает внутреннюю версию сервера на соответствующую программному_обеспечению_сервера.
-s
Эта опция указывает постоянную выдачу логов на stderr.
-t chroot_директория
При использовании этой опции, bozohttpd меняет корневой каталог на указанную chroot_директорию, перед ответом на запросы. Все другие пути должны быть определены относительно нового root'а, если использована эта опция. Помните, что текущее окружение обычно заменяется пустым окружением при использовании этой опцией, за исключением использования опции -e.
-U имя_пользователя
Эта опция указывает bozohttpd переключиться к пользователю и группам пользователей после инициализации. Эта опция, подобно опции -t описанной выше, указывает bozohttpd очищать окружение за исключением использования опции -e.
-u
Эта опция включает преобразование Единого Указателя Ресурсов (Uniform Resource Locator) с формы /~user/ в директорию ~user/public_html (но смотрите опцию -p выше).
-V
Эта опция устанавливает директорию виртуального хоста в slash_директорию. Если директория не создана в виртуальном root'е для запроса, то используется slash_директория. Поведение по умолчанию - возврат 404 (Не найден.)
-v виртуальный_root
Эта опция включает поддержку виртуального хостинга. Директории в виртуальном_root'е ищутся на предмет соответствия имени виртуального хоста, при анализе HTML запроса. Если найдено соответствующее имя, оно (имя) будет использовано как два имени серверов, [моё_имя], и как slash_директория. Смотрите в секции ПРИМЕРЫ использования этой опции.
-X
Эта опция включает индексацию директории. Индекс директории создаётся в случае отсутствия файла по умолчанию (т.е. обычно index.html).
-x индекс
Эта опция изменяет чтение файла по умолчанию для директорий с "index.html" на индекс.
-Z путь_сертификата путь_частного_ключа
Эта опция устанавливает путь к сертификационному файлу сервера и файлу частного ключа в pem формате. Также переключает bozohttpd в SSL режим.
Помните что в bozohttpd версиях 20031005 и ранее поддерживаются -C и -M опции, они получают единственный разделённый пробелом аргумент, разбираемый впоследствии. Позже в версии 20040828 они получили множественные опции (2 в случае -C и 4 в случае -M.)
КОНФИГУРАЦИЯ INETD
bozohttpd использует inetd(8) по умолчанию, используются входящие TCP подключения для HTTP запросов (но посмотрите на опцию -b), bozohttpd требует от пользователя простейших знаний работы сети. (Впрочем, Вы можете запустить его (bozohttpd) с командной строки с маленькими изменениями в функциональности.) Обычные записи в inetd.conf(5) выглядят так:
http stream tcp  nowait:600 httpd /@@PREFI@@/libexec/bozohttpd bozohttpd /var/www
http stream tcp6 nowait:600 httpd /@@PREFIX@@/libexec/bozohttpd bozohttpd /var/www
В данном примере указано наличие web страниц с /var/www для обоих IPv4 и IPv6 портов. :600 изменяет количество запросов на 600, в отличие от умолчаний inetd(8) установленных в 40.
Используя inetd(8) в NetBSD, Вы можете обеспечить несколько HTTP серверов основанных на IP-адресах, с помощью нескольких слушающих портов с различными конфигурациями.
ПРИМЕЧАНИЯ
Этот сервер поддерживает стандарты HTTP/0.9, HTTP/1.0 и HTTP/1.1. Поддержка для этих протоколов является очень минимальной и многие опциональные свойства не поддерживаются.
bozohttpd может быть скомпилирован без поддержки CGI (NO_CGIBIN_SUPPORT), поддержки индексирования директории (NO_DIRINDEX_SUPPORT), поддержки режима демона (NO_DAEMON_MODE), динамического MIME содержимого (NO_DYNAMIC_CONTENT) и SSL поддержки (NO_SSL_SUPPORT) определённой макросами при сборке bozohttpd.
БАЗОВАЯ АВТОРИЗАЦИЯ HTTP
bozohttpd имеет поддержку для базовой авторизации HTTP. Если файл названный как .htpasswd существует в директории текущего запроса, bozohttpd будет ограничивать доступ к документам в этой директории используя "Базовую" схему аутентификации описанной в RFC 2617.
Помните: Этот метод не предоставляет рекурсивной защиты вложенных директорий.
Файл .htpasswd содержит строки разделёнными с помощью двоеточий содержащих имена пользователей и пароли захешированных crypt(3)'ом, например:
heather:$1$pZWI4tH/$DzDPl63i6VvVRv2lJNV7k1
jeremy:A.xewbx2DpQ8I
На операционной системе NetBSD можно использовать утилиту pwhash(1) для создания хешированных паролей.
bozohttpd, поставляемая с NetBSD, имеет поддержку Базовой Авторизации HTTP по умолчанию, в портативной поставке это исключено. Компиляция bozohttpd с опцией "-DDO_HTPASSWD" включает эту поддержку. Может потребоваться соединение с библиотекой шифрования, используя "-lcrypt".
ПОДДЕРЖКА SSL
bozohttpd, по умолчанию, имеет поддержку для протоколов SSLv2, SSLv3 и TLSv1. Эта поддержка требует привязки с библиотеками crypto и ssl, с помощью "-lcrypto -lssl". Для отключения ПОДДЕРЖКИ SSL скомпилируйте bozohttpd с "-DNO_SSL_SUPPORT" в строку компилятора.

ФАЙЛЫ

bozohttpd просматривает специальные файлы в директориях, которые содержат определённые свойства обеспечивающие основу в-директории. Если в дополнение к .htpasswd используемой в базовой авторизации HTTP, обнаружен файл .bzdirect (содержимое не имеет значения) bozohttpd будет предоставлять прямой доступ через опцию -r. Если найдена символическая ссылка на .bzredirect, bozohttpd выполнит умное перенаправление к цели этой ссылки. Предполагается, что эта цель живёт на том же сервере. Если найдена символическая ссылка на .bzabsredirect, bozohttpd перенаправит на абсолютный url указанный в этой символической ссылке. Полезно для перенаправления на различные серверы.

ПРИМЕРЫ

Для конфигурации виртуальных хостов, можно использовать записи подобные следующим в inetd.conf(5):
http stream tcp  nowait:600 httpd /@@PREFIX@@/libexec/bozohttpd bozohttpd -v /var/vroot /var/www
и внутри /var/vroot создать директорию (или символическую ссылку на директорию) с названием виртуального хоста, для каждого виртуального хоста. Поиск для этих имён производится регистро-независимым образом.
Для использования bozohttpd с PHP, необходимо использовать опцию -C для определения CGI обработчика для частных видов файлов. Обычно, выглядит следующим образом:
bozohttpd -C .php /usr/pkg/bin/php /var/www

СМОТРИТЕ ТАКЖЕ

inetd.conf(5), inetd(8)

ИСТОРИЯ

Программа bozohttpd была написана на языке программирования Perl, основанной на другом Perl http сервере под названием "tinyhttpd". Он был переписан с нуля в Perl, а затем на C. Упор был сделан на простоту и безопасность, с минимальными свойствами и регулярным аудитом кода. Это руководство написано для bozohttpd версии 20100621.

АВТОРЫ

bozohttpd был написан Мэттью Р. Грином (Matthew R. Green <mrg@eterna.com.au>).
Включён большой список людей принявших участие в разработке:
- Арнауд Лакомбе (Arnaud Lacombe <alc@netbsd.org>) исправил некоторые утечки памяти
- Кристов Бадура (Christoph Badura <bad@bsd.de>) обеспечил диапазон: поддержку заголовок
- Джулиан Колеман (Julian Coleman <jdc@coris.org.uk>) Julian Coleman <jdc@coris.org.uk> обеспечил исправление ошибок на IPv6
- Чак Кранор (Chuck Cranor <chuck@research.att.com>) обеспечил исправления для поддержки cgi-bin и другое
- ДЕГРУТ Арнауд (DEGROOTE Arnaud <degroote@netbsd.org>) обеспечил исправления для режима демона
- Эндрю Доран (Andrew Doran <ad@netbsd.org>) обеспечил поддержку индексации директории
- Пир Экман (Per Ekman <pek@pdc.kth.se>) обеспечил исправление для минорного (не-безопасного) состояния переполнения буфера
- Алистайр Г. Крукс (Alistair G. Crooks <agc@netbsd.org>) произвёл чистку многих внутренних интерфейсов, сделал bozohttpd связываемым как библиотека и обеспечил связку с lua (Язык программирования).
- Джун-ичиро итоджун Хагино, КЕЙМ (Jun-ichiro itojun Hagino, KAME <itojun@iijlab.net>) обеспечил начальную поддержку IPv6
- Мартин Хасманн (Martin Husemann <martin@netbsd.org>) обеспечил поддержку .bzabsredirect
- Арто Хууско (Arto Huusko <arto.huusko@pp2.inet.fi>) обеспечил исправления cgi-bin
- Роланд Иллиг (Roland Illig <roland.illig@gmx.de>) обеспечил некоторые исправления
- Зак Джонсон (Zak Johnson <zakj@nox.cx>) обеспечил улучшения cgi-bin
- Николас Джомбарт (Nicolas Jombart <ecu@ipv42.net>) обеспечил исправления для поддержки базовой авторизации HTTP
- Томас Клауснер (Thomas Klausner <wiz@danbala.ifoer.tuwien.ac.at>) обеспечил много исправлений и улучшений для страницы руководства
- Джонни Лэм (Johnny Lam <jlam@netbsd.org>) обеспечил исправления в странице руководства
- Люк Мьюбурн (Luke Mewburn <lukem@netbsd.org>), обеспечил много различных исправлений, включая исправления для cgi-bin и улучшения, поддержку базовой авторизации HTTP и чистку кода
- Джереми С. Рид (Jeremy C. Reed <reed@netbsd.org>) обеспечил несколько исправлений очистки и обновление страницы руководства
- Скотт Рэйнольдс (Scott Reynolds <scottr@netbsd.org>) обеспечил различные исправления
- Тайлер Ретзлафф (Tyler Retzlaff <rtr@eterna.com.au>) обеспечил поддержку SSL, исправления cgi-bin и много другой разной чепухи
- Стив Рамбл (Steve Rumble <rumble@ephemeral.org>) обеспечил опцию -V.
- Жорж Сонненберг (Joerg Sonnenberger <joerg@netbsd.org>) осуществил поддержку If-Modified-Since
- ИСИХАРА Таканори (ISIHARA Takanori <ishit@oak.dti.ne.jp>) обеспечил исправления страницы руководства
- Холгер Вейсс (Holger Weiss <holger@CIS.FU-Berlin.DE>) обеспечил исправления http авторизации
- <xs@kittenz.org> обеспечил поддержку chroot'а и изменения-пользователя, и другие различные исправления
- Койот Поинт (Coyote Point) обеспечил различные CGI исправления
Возможно, кого-то Я забыл упомянуть (скажите мне, если не поленитесь)
Пожалуйста, отправляйте все обновления по bozohttpd на <mrg@eterna.com.au> для последующего включения их в будущие релизы.

ОШИБКИ

bozohttpd всё ещё не обрабатывает фрагментированный ввод HTTP/1.1 от пользователя.

BOZOS Июнь 17, 2010