Ограниченность ресурсов VDS приводит к тому, что, когда нагрузка резко возрастает, приходится менять хостера или тарифный план на более высокий либо пробовать выжать максимум из текущего сервера, оптимизировав установки и состав ПО. На слуху разные варианты: перейти с Apache на nginx, использовать связку nginx + Apache, установить кеширующий сервер Varnish. Но забывают о веб-сервере OpenLiteSpeed, который достоин внимания благодаря высокой производительности и низкому потреблению памяти.

 

Возможности OpenLiteSpeed

В середине 2013 года LiteSpeed Technologies, производитель проприетарного HTTP-сервера LiteSpeed, занимающего четвертое место по популярности (по статистике W3Techs), открыла код своего проекта под именем OpenLiteSpeed, сделав доступной бесплатно базовую функциональность. Со временем список функций расширился, а высокая производительность и низкое потребление памяти привлекли внимание пользователей. Особо хотелось бы отметить наличие веб-панели для настройки параметров и просмотра статистики. Многие пользователи с небольшим опытом администрирования для удобной настройки веб-сервера ставят хост-панели, нередко ограничивающие их в дальнейших возможностях ручной донастройки. Здесь же такой необходимости нет. Все уже идет в комплекте. Правда, есть и минус — отсутствие локализации.

В Сети можно найти большое количество тестов. При отдаче статики OpenLiteSpeed опережает по производительности Apache в несколько раз, а при выполнении PHP-скриптов выигрыш в скорости составляет до 50%. По сравнению с nginx OLS имеет аналогичные, если не лучшие показатели при выдаче статического контента. Здесь все зависит от конкретных настроек. По крайней мере, из коробки OLS обычно обходит стандартные установки nginx из дистрибутивных пакетов. Но OLS однозначно обыгрывает связку nginx + PHP-FPM. Специально разработанный для этого сервера PHP LSAPI (LiteSpeed Server Application Programming Interface) лучше масштабируется при более высоких нагрузках, чем PHP-FPM. По тестам разработчиков OLS обходит примерно на 20% FastCGI, на 50% — mod_php и на 75% связку nginx + PHP-FPM. Из коробки поддерживается запуск приложений на языках Python, Perl и Java.

Как и в nginx, в OLS архитектура событийно ориентированная, поддерживающая мультиплексирование соединений при помощи epoll (Linux), kqueue (FreeBSD, macOS) и /dev/poll (Solaris). Внешние приложения и дополнения запускаются как отдельные процессы, что позволяет разгрузить основной серверный процесс и увеличить эффективность обработки одновременных соединений. Обработка CGI-скриптов производится отдельным фоновым процессом. Поддерживает HTTP/2.

Реализованы различные функции, позволяющие создавать безопасные среды: suEXEC (выполнение скриптов с правами текущего пользователя), chroot, ограничение трафика и интенсивности запросов, правила на основе содержимого Referer, механизмы Accept-filter и sendfile. Есть и специфические установки. Например, LSAPI для suEXEC PHP предлагает три варианта использования: Daemon (скорость, кеширование, эффективное использование ресурсов), Worker (для узлов с ограниченными ресурсами) и ProcessGroup (скорость Daemon и настройки Worker). Есть возможность быстрой настройки и перестройки виртуальных хостов при помощи шаблонов.

Сервер поддерживает совместимые с mod_rewrite правила перезаписи запросов и SSI-вставки в стиле Apache, определение местоположения с GeoIP, сжатие контента (Gzip), возможность отдачи потокового медиаконтента (MP4 и F4V) и многое другое. В ранних версиях сервера по умолчанию использовались конфигурационные файлы в формате XML, но можно было переключаться на текстовый (скрипт /usr/local/lsws/conf/switch_config.sh). C версии 1.4 поддерживается только текстовый формат (как по мне, он более наглядный). При апгрейде все конфигурационные файлы автоматически преобразуются в текстовый формат; при необходимости даунгрейда на ранние версии сервера, для конвертации настроек в XML, разработчики приготовили скрипт /usr/local/lsws/backup/recover_xml.sh. Предусмотрена возможность применения новой конфигурации или обновления сервера без разрыва соединений (режим graceful).

Поддерживается два вида виртуального хостинга: IP-based и Name-based. Первый вариант реализуется за счет отдельных Listener, и такой виртуальный хост имеет свой собственный IP-адрес или порт. Доступна такая возможность, как Binding, позволяющая привязать отдельный Listener к lshttpd, который, в свою очередь, будет фактически привязан к своему CPU.

OpenLiteSpeed может быть установлен в качестве прозрачного обратного прокси-сервера к веб-серверу или серверу приложений, поддерживающему HTTP.

В коммерческой версии LSWS доступны: поддержка mod_security, возможность считывания конфигураций Apache, совместимость с панелями управления хостингом, поддержка mod_security, возможность использования .htaccess, кеширование контента на диске, поддержка chroot и некоторые другие функции. В общем, как видим, OLS здесь не сильно проигрывает nginx и не совсем подходит для организации хостинга. Зато отлично вписывается в небольшие и средние проекты и особенно удобен, когда на одном сервере нужно размещать большое количество своих сайтов. Также компания разрабатывает различные кеширующие плагины для некоторых CMS, совместимые с LSWS. Например, для WordPress.

Здесь бы хотелось сделать уточнение, чтобы не было путаницы. В OLS не поддерживаются файлы .htaccess, но вот сами правила rewrite можно перенести в настройки виртуального хоста в оригинальном виде. Также формат журнала изначально совместим с Apache, поэтому без дополнительных настроек будут работать все анализаторы логов, включая fail2ban. То есть с OLS меньше возни, чем при переходе с Apache на nginx. Это большой плюс.

 

Установка OpenLiteSpeed в Ubuntu

Проект предоставляет репозитории для CentOS 5/6/7, Debian 7/8 и Ubuntu 12/14/16. Остальные можно установить при помощи исходных текстов. На сайте есть инструкция, это в общем не очень запутанно. В Ubuntu процесс такой:

$ wget -O - http://rpms.litespeedtech.com/debian/enable_lst_debain_repo.sh | sudo bash
$ sudo apt install openlitespeed

В /usr/local/lsws будет создана структура каталогов с настройками, шаблонами и исполняемыми файлами. Проверяем:

$ /usr/local/lsws/bin/lshttpd -v
LiteSpeed/1.4.23 Open

Теперь PHP. В репозитории имеется несколько версий от PHP 5.4 до последней, 7-й. Смотрим список:

$ sudo apt search lsphp

Поставим для примера PHP 5.6. Для упрощения выберем все модули:

$ sudo apt install lsphp56-*

Проверяем, чтобы в /usr/local/lsws/fcgi-bin был файл или ссылка lsphp. Если нет, создаем вручную.

$ sudo ln -sf /usr/local/lsws/lsphp56/bin/lsphp /usr/local/lsws/fcgi-bin/lsphp5

Для управления стартом используется утилита lswsctrl. Все параметры можно узнать, введя

$ /usr/local/lsws/bin/lswsctrl help

Стартуем:

$ sudo /usr/local/lsws/bin/lswsctrl start

При установке из пакетов доступен init-скрипт, поэтому в обычной эксплуатации следует использовать его.

$ sudo service lsws start

По умолчанию сервер запускается с правами nobody:nogroup, веб-админка — lsadm/lsadm. В зависимости от установок сервера их, вероятно, потребуется изменить. Также следует проверить права доступа веб-сервера к каталогу временных файлов. По умолчанию это /tmp/lshttpd/swap, изменить его можно, переопределив переменную swappingDir в конфигурационном файле.

 

Знакомимся ближе

Если ввести netstat -an, то увидим, что открыты порты 8088 и 7080. Первый — это вход на рабочую страницу веб-сервера, в данный момент там установлена заглушка в виде страницы приветствия. Следует начать с нее — http://localhost:8088. Кроме сообщения об успешности установки, эта страница содержит множество ссылок, позволяющих протестировать правильность работы основных функций: CGI, PHP, страница ошибок 404, аутентификация, загрузка файлов, документация и другое. Желательно обойти все пункты и посмотреть, что все работает. Если что-то выдает ошибку, обращаемся к журналу /usr/local/lsws/logs/error.log.

Конфигурационный файл OLS — httpd_config.conf — размещен в /usr/local/lsws/conf, здесь же есть готовые шаблоны файла под разные задачи. Он в целом стандартный, разделен на секции, и назначение большинства параметров тем, кто хоть раз настраивал веб-сервер, должно быть ясно без документации. Например, в expires настраивается кеширование, в tuning оптимизируется работа сервера, в accessDenyDir указываются каталоги, доступ к которым запрещен, virtualHost — настройка виртуальных узлов и так далее. Обработчик PHP подключается в секции extProcessor lsphp5:

extProcessor lsphp5{
    type lsapi
    address uds://tmp/lshttpd/lsphp.sock
    path $SERVER_ROOT/fcgi-bin/lsphp5
    ...
}

Аналогично подключаются обработчики на Ruby, Perl и другие. В параметрах виртуального хоста задается корневой каталог и конфигурационный файл, содержащий специфические настройки:

virtualhost Example {
    vhRoot $SERVER_ROOT/Example/
    configFile $SERVER_ROOT/conf/vhosts/Example/vhconf.conf
    ...
}

Теперь правила rewrite. Здесь также ничего сложного:

rewrite {
    enable 1
    logLevel 0
    rules <<<END_rules

    RewriteBase /
    RewriteRule ^/index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    END_rules
}

Базовых параметров не очень много, поэтому, чтобы запустить сайт, потребуется минимум времени. Группа каталогов представляет собой так называемый контекст (context), к которому могут быть применены определенные правила. Контекст может быть десяти типов: статический, прокси, LoadBalance, LSAPI, Java... Но фишка OLS — это все-таки веб-панель.

 

Приступаем к настройке в веб-панели

OpenLiteSpeed — веб-сервер, которым обычно управляют через административный интерфейс, он удобен и понятен, содержит большое число полезных возможностей. Поэтому стоит познакомиться с некоторыми из них. Идем в админку https://localhost:7080. По умолчанию для входа используется логин admin и пароль 123456, их впоследствии обязательно меняем в WebAdmin Setting -> General -> Users. В поставке также есть специальный скрипт /usr/local/lsws/admin/misc/admpass.sh, позволяющий изменить пароль из консоли, его можно использовать в случае, если пароль забыли и его нужно сбросить.

После входа попадаем в панель статистики Dashboard, дающую полное представление о текущей работе OLS так сказать из коробки, без установки дополнительных модулей server-status, как в Apache. Здесь видим общую загрузку системы, веб-трафик и количество запросов на сервер, отдельные данные по Listener и виртуальным узлам. Нужные графики легко подключаются установкой чекера, есть режим отображения в реальном времени. Здесь же выводятся логи ошибок с возможностью отбора результата при помощи фильтров. Отдельно включается режим отладки и переход на рабочие журналы (Tools -> Server Log Viewer). Здесь же можно быстро остановить виртуальный узел. Для этого следует лишь нажать кнопку в Virtual Host -> Actions. Хотелось бы обратить внимание на ссылку Maсhine вверху слева. При ее нажатии откроются четыре кнопки, позволяющие перезагрузить настройки в Graceful-режиме, получить доступ к логам и статистике.

Вывод графиков в панели администратора OpenLiteSpeed
Вывод графиков в панели администратора OpenLiteSpeed

Теперь можно приступать к настройкам. Порт по умолчанию 8088 выбран, очевидно, для демоцелей и чтобы не было конфликтов при установке во время смены сервера, но он не очень удобен для посетителей. Сменим его на стандартный 80-й. Переходим в Listeners, выбираем в списке прослушиватель Default, нажимаем на название или кнопку View/Edit. На экране в Address Settings в трех вкладках General/SSL/Modules будет выведен список параметров. Еще важная особенность. К Listener в Virtual Host Mappings можно привязать определенные домены.

Настройка Listener
Настройка Listener

Это позволяет очень просто настроить сервер для выдачи строго определенных доменов по разным IP, портам и с использованием SSL или без защиты.

Для изменения параметров следует нажать ссылку Edit, расположенную в правой части поля Address Settings. Меняем порт. В появившемся окне указываем порт 80 вместо 8088. При необходимости привязываем Listener к определенному IP и процессу (Binding). Если планируется использование HTTPS, то следует отметить Secure, сохранить результат и во вкладке SSL таким же образом указать сертификаты (их нужно будет сгенерировать самостоятельно или получить). Далее перечитываем настройки Maсhine -> Graceful Restart. Теперь стандартная страница будет доступна на 80-м порту. Порт для админки перестраивается в WebAdmin Settings -> Listeners.

Страница Server Configuration позволяет настроить все параметры httpd_config.conf в удобном виде. Здесь восемь основных секций (General, Log, Tuning, Security, External App, Script Handler, Rack/Rails и Modules), каждая из которых может содержать подпункты. Особо расписывать нечего, настроек много, везде доступно краткое описание, некоторые значения устанавливаются при помощи чекбокса или выбираются из списка.

В поставке идет несколько модулей, все они находятся в /usr/local/lsws/modules; кроме этого, можно установить ряд модулей сторонних разработчиков. Чтобы они были доступны Listener и виртуальным узлам, сами модули и параметры по умолчанию следует прописать во вкладке Modules, указав имя (без расширения) и заполнив поле Module Parameters (обычно берется в документации). После настроек потребуется перезапустить OLS. В последующем в настройках Listener и виртуальных узлов модуль просто выбирается из списка, а установленные параметры можно переопределять.

Настройки основных параметров OpenLiteSpeed в веб-панели
Настройки основных параметров OpenLiteSpeed в веб-панели

В репозитории проекта доступны разные версии lsphp, но иногда их параметры или номер релиза могут не подходить требованиям конкретного приложения. Веб-панель позволяет легко собрать оптимизированную версию PHP под свои нужды. Для этого нужно перейти в Tools -> Compile PHP и следовать указаниям программы: выбираем версию, параметры и так далее. Затем настройки обработчика нужно указать в параметрах виртуального узла.

OpenLiteSpeed предоставляет возможность сборки PHP из админ-панели
OpenLiteSpeed предоставляет возможность сборки PHP из админ-панели
 

Виртуальные узлы

Интерфейс администратора позволяет создавать виртуальные узлы. Причем OLS предлагает сразу два способа: ручной и при помощи шаблонов. Единственный важный момент: все файлы и каталоги, необходимые для работы виртуального узла, следует подготовить заранее. Исключение лишь конфигурационный файл. Нужно просто указать в настройках его имя, и если файл есть (например, взят с подобного узла), то установщик проверит возможность его редактирования, если нет, то при сохранении появится запрос на его создание и будет создан файл с базовыми (почти пустыми) настройками. Проще поначалу скопировать шаблоны и файлы тестового сайта Example в новое место и затем указать пути (абсолютные или относительно $SERVER_ROOT) в веб-панели.

$ /usr/local/lsws
$ sudo cp -vR Example Example1

Конфигурационный файл должен находиться в $SERVER_ROOT/conf/vhosts или $SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf ($VH_NAME соответствует имени виртуального узла).

$ sudo mkdir conf/vhosts/Example1
$ sudo chown lsadm:lsadm conf/vhosts/Example1

Настроек много. Задаются параметры вплоть до ограничения статических/динамических запросов с одного IP и полосы пропускания. Если возникнут проблемы, при сохранении мастер выдаст подсказку. Далее устанавливаем Document Root, имя домена, алиасы и прочие параметры. Сохраняем настройки и привязываем к виртуальному хосту нужный Listener. Переходим в Listeners, выбираем Add, чтобы добавить новый Listener, или переходим в Default -> Virtual Host Mappings, где прописываем новый узел, введя название виртуального хоста и домена. По окончании перезапускаем сервер.

Создаем виртуальный хост
Создаем виртуальный хост

Второй способ интересней, так как позволяет создавать узлы на основании готового шаблона и перестраивать впоследствии все виртуальные узлы с одного места. Шаблон по сути — это скелет для сайта плюс конфигурационный файл и Listener. Если необходимо что-то поменять в настройках всех узлов, достаточно будет просто изменить шаблон, после чего изменение распространится на связанные узлы. Появляются новые задачи — просто создаем новый шаблон и подключаем к нему узлы. Созданные ранее виртуальные узлы можно подключить к шаблону, как и, наоборот, нажав ссылку Instantiate, можно «отключить» виртуальный узел от шаблона и пустить в свободное плаванье.

По умолчанию в VHost Templates находится три шаблона: centralConfigLog, PHP_SuEXEC и EasyRailsWithSuEXEC. Сами файлы расположены в conf/templates, чтобы создать новый, можно скопировать и изменить имеющийся. Также проект предлагает готовые шаблоны, правда пока они в старом XML-формате. После копирования файла в conf/templates переходим в VHost Templates, нажимаем Add и прописываем название и путь к файлу.

Теперь создаем виртуальный узел из шаблона, выбираем шаблон и в поле Member Virtual Hosts нажимаем Add, после чего вводим название узла, имя домена и алиас. После сохранения он появится в списке Member Virtual Hosts и во вкладке Virtual Hosts, где будет дополнительно отмечен значком, поясняющим, с какого шаблона он установлен.

Шаблон VHost в OpenLiteSpeed
Шаблон VHost в OpenLiteSpeed
 

Заключение

После всех настроек веб-сервер OpenLiteSpeed установлен на сервер и готов к работе. Несмотря на то что написано много, он очень прост для небольших проектов и гибок для сложных конфигураций.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии