Конфигурируем веб-сервер Yaws на Erlang
Posted on | August 2, 2011 | No Comments
Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/dezhik.ru/wp-content/plugins/wp-syntax/wp-syntax.php on line 76
Сейчас начинаю делать проект на Erlang и встала необходимость выбора веб-сервера. Выбор пал на Yaws v.1.90 (расш. Yet Another Web Server) мне понравилась его заявленная высокая отказоустойчивость, максимальное количество одновременно обрабатываемых запросов и то, что проект продолжает развиваться, например в Yaws 1.90 от 24.05.2011 добавили поддержку Websockets. По ходу установки и настройки сервера я решил написать небольшую статью в помощь начинающим. Самое интересное под катом..

Диаграмма иллюстрирует скорость отдачи при возрастающей нагрузке. Результаты бенчмарка Apache 2.0.39 MPM Worker vs Yaws на медленных запросах показали что Apache ложится на 4000 запросах в секунду, Yaws держится и на 80 000 запросов/сек. При условиях: медленные HTTP запросы, фиксированная пропускная способность исходящего канала в 800 Кб/сек, возрастающая нагрузка. Условия теста очень похожи на DDOS атаку. Эта старая картинка есть в половине статей о Yaws, что ж, я тоже не буду исключением :)
Установим веб-сервер (Erlang установится автоматически, если не был установлен ранее), также в дистрибутиве будет БД Mnesia, тоже написанная на Erlang
$ sudo apt-get install yaws
или
$ sudo aptitude install yaws
Основной конфигурационный файл лежит в /etc/yaws/yaws.conf, вот простой пример Вот простой конфиг-файл:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | max_num_cached_files = 8000 max_num_cached_bytes = 6000000 logdir = /var/log/yaws <server www.mydomain.org> port = 80 listen = 192.168.128.31 docroot = /var/yaws/www access_log = false <auth> dir = secret/dir1 user = jonny:verysecretpwd user = benny:thequestion user = ronny:havinganamethatendswithy </auth> </server> |
logdir = Dir
Устанавливаем директорию для логов. Yaws ведёт несколько логов:
- в report.log пишется лог ошибок сервера,
- в
.access access-лог для каждого виртуального хоста, - в
.auth сообщения связанные с http auth - trace.http и trace.traffic специализированные, нужно включать отдельно
log_wrap_size = int
Макс размер лог-файла. При его превышении файл будет усекаться.
access_log = true | false
Вести или нет access-лог. default: true
ebin_dir = Dir
Установка директории для поиска Erlang файлов. default: “yaws_dir”/examples/ebin
include_dir = Dir
Директория дли Erlang include-файлов default: “yaws_dir”/examples/include
server_signature = String
Устанавливает Server: в header ответа, стандартный “Server: yaws/%VSN%, Yet Another Web Server”.
ysession_mod = Module
Установка механизма хранения сессий отличного от стандартного (ETS таблицы). Основной минус ETS таблиц – потеря сессионых кукиз при перезапуске сервера.
Установка редиректов в Yaws
<redirect> ... </redirect>
Блок описания редиректов, внутри определяем параметры
Path = URL | File
При запросе страниц начинающихся с Path редиректим на соответствующую в URL, например:
1 2 3 4 | <redirect> /foo = http://site.org/zapp /bar = /tomato.html </redirect> |
Получим:
http://abc.com/foo -> http://site.org/zapp/foo
http://abc.com/foo/test -> http://site.org/zapp/foo/test
Однако, изменив 2 строку конфига на /foo == http://site.org/zapp
, мы получим
http://abc.com/foo/test/abc -> http://site.org/zapp
Немного о кэшировании в Yaws (cache in Yaws web-server):
max_num_cached_files = int
Максимальное количество кэшируемых файлов. Yaws кэширует частозапрашиваемые файлы в RAM.
max_size_cached_file = int
Максимальный размер кэшируемого файла.
max_num_cached_bytes = int
Максимальный размер RAM памяти, выделяемой под кэш. Исчисляется в байтах.
cache_refresh_secs = int
Время жизни кэша. При разработке удобнее поставить 0. default: 30 sec
Настройки подключений в Yaws (config connections in Yaws web-server)
max_connections = nolimit | int
Максимальное количество одновременных подключений
keepalive_timeout = TimeInMilliseconds | infinity
Какое время будет жить подключение, если не будет сразу закрыто.
keepalive_maxuses = nolimit | int
Если установлено – keepalive соединение не будет использовано более int раз.
Включаем поддержку скриптов (PHP, CGI) в Yaws
allowed_scripts = ListOfSuffixes
default: allowed_scripts = yaws php cgi fcgi
php_handler = <Type, Spec>
Указываем директорию где установлен интерпретатор для PHP скриптов.
php_handler = <cgi, Filename>
php_handler = <fcgi, Host:Port>
Использовать следующий fastcgi сервер для fcgi-файлов, пример: php_handler = <fcgi, 127.0.0.1:54321>
Кратко об установке WWW аутенфикации на Yaws
<auth> ... </auth>
Блок описания структуры и параметров аутенфикации. Описывается в блоке <server>..</server>
dir = Dir
Установка директории для входа в которую нужна www аутенфикация.
user = User:Password
Установка реквизитов доступа, user директив может быть несколько.
allow = all | ListOfHost
Кому разрешен доступ к аутенфикации/материалам. Список хостов задаётся через запятую.
deny = all | ListOfHost
Кому запрещён доступ.
<opaque> .... </opaque>
Игнорируемый сервером контекст, который может быть использован приложениями.
Заполняется ‘Key = Value’ директивами, которые потом можно получить из приложений в виде кортежей {Key, Value}
Запустить теперь Yaws с использованием нашего конфигурационного файла можно так:
$ yaws --daemon --conf DIR/ConfigFileName
Comments
Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/dezhik.ru/wp-includes/class-wp-comment-query.php on line 399