From: Mike Belopuhov <mkb@cvs.hnet.spb.ru.>
Newsgroups: http://openbsd.hnet.spb.ru
Date: Mon, 20 Sep 2004 18:21:07 +0000 (UTC)
Subject: Использование thttpd
Оригинал: http://openbsd.hnet.spb.ru/thttpd.html
Содержание:
Установка
Иcпользование CGI с thttpd
QoS в отдельно взятом HTTP сервере
Реализация виртуального хостинга в thttpd
Замечания
Заметка предназначается всем, кто ищет альтернативный HTTP сервер с
очень малым потреблением системных ресурсов и большой скоростью. thttp
имеет еще пару особенностей и полезностей. Вместе с тем он крайне
нетребователен к ресурсам (занимает ~960kb RAM), достаточно эффективен
(на системах BSD использует kqueue) и безопасен (privsep, chroot).
Тем паче, что установка этого чуда -- дело пяти минут.
Установка thttpd
Шаг #1. Собственно установка:
$ cd /usr/ports/www/thttpd; sudo make install
Шаг #2. Настройка rc.local на запуск thttpd
Для этого в /etc/rc.local добавим следующее (желательно до строки,
содержащей `echo '.'', дабы не сбить оригинальное форматирование при
выводе):
if [ "X${thttpd_flags}" != X"NO" -a -x /usr/local/sbin/thttpd ]; then
echo -n ' thttpd'; /usr/local/sbin/thttpd ${thttpd_flags}
fi
и соответственно в /etc/rc.conf.local:
thttpd_flags="-C /etc/thttpd.conf"
Таким образом можно управлять загрузкой thttpd с помощью thttpd_flags.
Шаг #3. Конфигурационный файл thttpd
Я хочу схитрить и показать работающую конфигурацию (конечно только
ради того, чтобы сберечь Ваше время ;). В данном случае я использую
thttpd с /var/www и пользователем www (прошу прощения за каламбур).
Таким образом никакого дополнительного дерева директорий и
пользователя создавать не придется. Итак, /etc/thttpd.conf:
Параметр data_dir указывает на собственно место расположения HTML
страничек -- это может быть и htdocs (как в Apache). Подробнее об
опциях можно прочитать в thttpd(8).
Шаг #4. Запуск.
Для проверки можно запустить thttpd не превращая его в демона:
# /usr/local/sbin/thttpd -C /etc/thttpd.conf -D
Если все нормально, то ^C и запустить его нормально:
# /usr/local/sbin/thttpd -C /etc/thttpd.conf
Иcпользование CGI с thttpd
Все очень просто. Во-первых уберем параметр chroot из thttpd.conf,
если у Вас конечно CGI программы не написаны на C и слинкованы
статически. Во-вторых -- пишем где их искать. Запись
cgipat=/cgi-bin/*
означает, что можно запускать CGI программы из директории полный путь
которой складывается из значений параметров dir и data_dir.
Положим, что dir=/var/www, а data_dir=htdocs, тогда поный путь к
директории с CGI программами будет /var/www/htdocs/cgi-bin/.
QoS в отдельно взятом HTTP сервере
Первая буква в названии как раз и говорит о том, что (помимо tiny и
turbo) этот сервер поддерживает технологию Quality of Service (здесь и
далее будем называть это термином throttling).
Идея, положенная в реализацию throttling'а, заключается в
дифференцировании скорости передачи объектов по их типу (т.е. типу
файла). Таким образом, например для файлов изображений, можно
установить максимальную скорость передачи в половину пропускной
способности канала, а для HTML файлов, наоборот задать максимальную
скорость передачи.
Детально это записывается так (пример для канала Fast Ethernet):
** 12500000 # full
**.jpg|**.gif|**.png 3125000 # quarter
в файл throttle, который указывается в конфигурационном файле
(/etc/thttpd.conf) параметром throttles:
throttles=/var/www/conf/throttles
В thttpd(8) это очень понятно расписано (раздел THROTTLING) и дан
более развернутый пример.
Реализация виртуального хостинга в thttpd
Как сказано в thttpd(8), поддерживается две разновидности виртуального
хостинга: ``IP based'' и ``name based''. Рассмотрим второй вариант.
Первый шаг -- создать записи в DNS:
www.server.com IN A x.y.z.k
sub1.server.com IN CNAME www.server.com
...
Для тех кто тестирует, хватит записи и в /etc/hosts. Далее, нужно в
директории, доступной thttpd (скажем /var/www) создать соответствующие
директории для кажного sub-домена:
Ну и наконец дадим знать об этом thttpd. Это достигается добавлением в
конфигурационный файл (/etc/thttpd.conf) параметра vhost.
Viola! Это все. Помните, что директории cgi-bin должны быть в каждой
директории для виртуального хостинга.
Замечания
1. Пользователям Apache, привыкшим к директиве Indexes может быть не
сразу ясно как запретить серверу выдавать листинги директорий. Все
решается стандартными правами Unix. Пример (thttpd работает от
www.www):
$ ls -dl /var/www/public_html/dir
drwxr-xr-x 2 user daemon 512 Aug 4 22:35 /var/www/public_html/dir
$ chmod 751 /var/www/public_html/dir
drwxr-x--x 2 user daemon 512 Aug 4 22:35 /var/www/public_html/dir
2. Страницы со стандартными ответами (Error 404, например), можно
заменить на свои. Для этого создается директория errors, в которую
помещаются файлы errXXX.html (к примеру, err404.html).