Установка веб-сервера Оpen LiteSpeed

LiteSpeed

Введение

 LiteSpeed - легкий высокопроизводительный проприетарный веб-сервер компании LiteSpeed Technologies, который умеет читать и применять файлы конфигурации Apache. Он может подключаться к панели управления веб-хостингом,  заменяя громоздкий и медленный веб-сервер Apache.
LiteSpeed доступен для ОС Linux, Солярис FreeBSD. LiteSpeed  поддерживает spdy/3.1, протокол http/2 и другие современные технологии, имеет фирменный балансировщик нагрузки и многие другие преимущества.
Производитель заявляет, что производительность LiteSpeed выше, чем у Apache в 6-9 раз при работе со статическим содержимым, а также ускорение исполнения PHP-скриптов до 50%.
При использовании PHP-акселераторов работа сервера с динамическим содержимым происходит еще быстрее.
Важно знать, что LiteSpeed использует не пакет PHP, установленный в операционной системе, а отдельные пакеты PHP, которые размещаются внутри папки сервера LiteSpeed и работают только для него. Там же расположены и расширения PHP, работающие в LiteSpeed.
LiteSpeed имеет довольно удобную и мощную консоль управления его настройками из браузера (административную панель).
Поддерживается перезапуск сервера для обновления параметров конфигурации без разрыва соединений, называемый "graceful restart".
Также сервер имеет средства повышенной безопасности: выполнение скриптов с правами пользователя, ограничение трафика/интенсивности запросов и др.

Open LiteSpeed - некоммерческая версия сервера LiteSpeed. Она отличается открытым исходным кодом и лицензией GPLv3, свободна для распространения и использования.
Чтобы платную версию LiteSpeed не перестали покупать, производитель ограничил бесплатную версию. Open LiteSpeed не ограничен в производительности, или в функциях, но не поддерживает ряд особенностей, характерных для Apache: встраивание в панель хостинга, поддержка конфигурационных файлов Apache, файлов ".htaccess" и др. Эти исключенные функции представляются факультативными. 
Ниже описана установка Open LiteSpeed на CentOS 7. На Debian 8 версия PHP7, встроенная в LiteSpeed, работала не корректно.

Предполагается, что вам уже известны основы работы с VPS, изложенные в отдельной статье.

Прежде всего обновляем пакеты в виртуальной машине:

yum -y update

Устанавливаем необходимый минимум пакетов:

yum install zip unzip mc nano

Настройка SSH

Для снижения нагрузки на сервер от автоматических атак на 22 порт не лишним будет поменять номер порта, определенный по умолчанию, на любой другой свободный порт. Для этого редактируем файл конфигурации SSH:

nano /etc/ssh/sshd_config

Раскомментируем строку  "port 22" и заменим в ней "22" на новый номер порта подключения, например, на "33445".
Обязательно запоминаем (точнее - записываем) новый номер порта для SSH, чтобы иметь не потерять возможность подключения, забыв порт.
Перезапускаем сервис SSH для применения изменений:

systemctl restart sshd

Не забываем обеспечить возможность работы нового порта, открыв к нему доступ в selinux и iptables.
Другой вариант, снижающий уязвимость к атакам, но более простой: отключаем firewalld и selinux, чтобы иметь возможность работать с любыми портами:

systemctl disable firewalld
systemctl stop firewalld
chkconfig firewalld off
nano /etc/selinux/config

найдя текст "SELINUX", присваиваем ему новое значение: SELINUX=disabled и сохраняем файл.

Установка сервера LiteSpeed

Без использования репозитария epel-release загрузится очень старая версия пакета LiteSpeed, поэтому подключаем этот репозиторий:

yum install epel-release
rpm -ivh http://rpms.litespeedtech.com/centos/litespeed-repo-1.1-1.el7.noarch.rpm
yum update

В моем случае важно было не забыть пакет, которого не было в минимальном дистрибутиве, но без которого не создавались ключи, необходимые для работы сервера:

yum install openssl

Устанавливаем сам пакет Оpen LiteSpeed:

yum install openlitespeed

После установки весь веб-сервер с его компонентами расположится в папке:

/usr/local/lsws/

Папка с тестовым содержимым html - во вложенной папке:

/usr/local/lsws/Example/html

Установка PHP 7

На момент написания статьи в комплект  LiteSpeed входит только PHP 5-й версии.
Для установки внутри LiteSpeed интерпретатора PHP 7 и всех его расширений, за исключением «битых» пригодна команда:

yum install lsphp70-*  --skip-broken

Каждое расширение PHP - это потенциальный путь для уязвимости сервера, поэтому рекомендуется установить только те расширения, которые действительно необходимы. В моем случае  вполне достаточным был вариант:

yum install lsphp70 lsphp70-gd lsphp70-imap lsphp70-intl lsphp70-json  lsphp70-mbstring lsphp70-mcrypt lsphp70-mysqlnd lsphp70-opcache lsphp70-pdo lsphp70-recode lsphp70-xml lsphp70-zip

После этого LiteSpeed уже в рабочем состоянии, если не было ошибок при установке.

Установка MariaDB

Для использования последней стабильной версии МariaDB подключаем репозиторий производителя этого пакета:

nano /etc/yum.repos.d/MariaDB.repo

В редактируемый файл заносим следующую информацию:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Затем устанавливаем MariaDB, запускаем его, настраиваем пароль доступа и параметры безопасности:

yum install MariaDB-server
mysql_install_db
systemctl start mariadb
mysql_secure_installation

Проверяем работу сервера LiteSpeed

Вводим в браузере адрес:

http://xx.xx.xxx.xxx:8088

Вместо xx.xx.xxx.xxx укажите IP-адрес вашего сервера, или имя его домена, если домен для сервера был присвоен и корректно направлен.

Если сервер корректно заработал, то должна появиться примерно следующая тестовая welcome-страница:

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

По ссылке https://xx.xx.xxx.xxx:7080 можно зайти в веб-интерфейс администрирования сервера.

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

Ошибка SSL
Добавьте соответствующее исключение в браузере. В Firefox это достигается командами:
дополнительно -> добавить исключение -> подтвердить исключение безопасности.
В появившемся окне авторизации введите данные аккаунта администратора по умолчанию. Имя: admin, пароль: 123456. Переходите в панель управления.

панель управления Лайти

Ниже будет дано описание основ работы в этой админ-панели.

А пока для обеспечения безопасности сервера необходимо незамедлительно поменять пароль и имя администратора командой:

/usr/local/lsws/admin/misc/admpass.sh

Введите данные в консоли в ответ на полученные вопросы.
После этого можно выйти из админ-панели и зайти в нее с новыми учетными данными.

Основы работы в веб-панели LiteSpeed

Слева на панели размещены разделы:

Dashboard - панель просмотра статистики, основных настроек и лога событий.

Server Configuration - основные настройки сервера.
В этом разделе наибольшего внимания заслуживают вкладки:

  • General, где указываются имя пользователя, от которого работает LiteSpeed; размер буфера ввода-вывода, папка для файла подкачки, настройки индексных файлов по умолчанию и др. 
  • External App, в котором подключаются внешние приложения: FastCGI, приложения LiteSpeed SAPI, другие веб-серверы, для которых LiteSpeed проксирует запросы, балансировщики нагрузки  и т.д.

Listeners - настройка listener'ов ("слушателей"). Listener - процесс сервера, принимающий входящие запросы из сети.

Нажав гиперссылку с названием "слушателя" можно перейти к его подробным параметрам:

  • Listener Name - его имя;
  • ip-адреса, с которых принимает соединения (конкретный диапазон, или все адреса "All");
  • порты, которые он слушает;
  • Secure - работает он с защищенным соединением, или нет;
  • binding - связь с дочерним процессом, которая определяет, какие дочерние процессы соответствуют "слушателю". Различные дочерние процессы могут быть использованы для обработки запросов к различным "слушателям", вручную связывая "слушателя" с процессом. По умолчанию, каждый "слушатель" присваивается всем дочерним процессам.
  • virtual host mappings - задает отношение "слушателя" к хостам: обрабатывает ли он все хосты, или некоторые из них.

Virtual hosts - список виртуальных хостов, каждый из которых имеет:

  • его имя;
  • Virtual host root - путь к корневой папке с файлами хоста на сервере (в этой папке находятся именно файлы хоста с его конфигурацией и логами, причем папка с файлами html, или php предполагается вложенной в нее);
  • Config File - путь к конфигурационному файлу хоста.

VHost Templates - готовые шаблоны виртуальных хостов.

Tools - набор дополнительных инструментов: запуск компиляции пакета PHP, который будет работать в LiteSpeed, а также 2 инструмента, которые по большому счету дублируют вкладку Dashboard: просмотрщик логов сервера и монитор событий "в реальном времени".

WebAdmin Settings - настройки панели администрирования веб-сервера.
Тут имеется забавная рекурсия: веб-сервер LiteSpeed обеспечивает, в частности, работу веб-интерфейса административной панели управления  параметрами LiteSpeed. И параметры веб-сервера, касающиеся работы админ-панели, доступны именно в этой вкладке админ-панели. Как и для обычного хоста тут прописаны стандартные параметры и настройки отдельного "слушателя".

Help - ссылки помощи, каждая из которых перенаправляет на веб-ресурс: онлайн-справку, гиды по решению отдельных проблем и на тематический форум в группе Goggle. Все эти ресурсы - англоязычные.

Пример настройки нового сайта для CMS Drupal, Wordpress и подобных

Подключаем PHP 7

В разделе "Server configuration" во вкладке "External app" нажимаем кнопку "add".
Многие элементы управления LiteSpeed  представляют из себя невзрачные маленькие кнопки, расположенные в неожиданном месте. Их назначение трудно угадать, пока не подведешь курсор мыши. Вот и кнопка "add" - не исключение. Она выделена на иллюстрации ниже красным цветом.

external app

Выбираем тип нового приложения "LiteSpeed SAPI app" и жмем кнопку со стрелкой вправо: "next".
Заполняем данные.
Ниже использованы данные по умолчанию, по умолчанию установленные для PHP 5 с необходимыми правками, применимыми к седьмой версии PHP:

  • Name (имя приложения): lsphp7
  • Address (адрес подключения к приложению): uds://tmp/lshttpd/lsphp70.sock
  • Max Connections: 35
  • Environment (заполняется именно в две строки, так, как приведено ниже):
PHP_LSAPI_MAX_REQUESTS=500
PHP_LSAPI_CHILDREN=35
  • Initial Request Timeout (secs): 60
  • Retry Timeout (secs): 0
  • Persistent Connection: Yes
  • Response Buffering: No
  • Auto Start: Yes
  • Command (путь к бинарному файлу приложения): $SERVER_ROOT/lsphp70/bin/lsphp
  • Back Log: 100
  • Instances:  1
  • Priority: 0
  • Memory Soft Limit (bytes): 2047M
  • Memory Hard Limit (bytes): 2047M
  • Process Soft Limit: 400
  • Process Soft Limit: 500

Нажав знак вопроса, расположенный рядом с параметром, можно увидеть подробное описание этого параметра.
Остальные поля оставляем пустыми.
Жмем значок сохранения "save", неожиданно расположенный сверху, справа от заголовка "LiteSpeed SAPI App".
В верхней части интерфейса появляется сообщение о необходимости сделать  изящный перезапуск ("gracefull restart") сервера LiteSpeed, чтобы сделанные изменения вступили в силу, но пока в этом нет необходимости, т.к. настройки не завершены.

В результате получаем, что к LiteSpeed подключено приложение PHP 7, расположенное по пути относительно папки LiteSpeed: $SERVER_ROOT/lsphp70/bin/lsphp, обращение к нему происходит по адресу: uds://tmp/lshttpd/lsphp70.sock

Добавляем новый Listener

Переходим в раздел Listeners, где аналогичным образом находим кнопку "add", жмем ее и присваиваем значения:

  • Listener Name: main
  • IP Address: any
  • Port: 80
  • Secure: no

Жмем значок сохранения "save". Где ее найти, уже знаем.
В результате сервер слушает входящие соединения на стандартном порту 80 с любых входящих адресов без установления защищенного соединения.

Создаем новый хост

До того, как задавать конфигурацию нового хоста в интерфейсе админ-панели LiteSpeed, нужно вручную предварительно создать рабочую папку хоста в файловой системе VDS, т.к. сам веб-сервер папки не создает.
В нашем случае это будет папка: /var/www/test/
В этой папке сразу же создаем папку для документов сайта с названием: html 

Создав нужные папки в консоли SSH, возвращаемся в веб-интерфейс админ-панели.
Переходим в раздел "Virtual Hosts". Там снова жмем "add" и заполняем свойства нового хоста.

  • Virtual Host Name: test
  • Virtual Host Root: /var/www/test/
  • Config File: $SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf
  • Enable Scripts/ExtApps: yes
  • Restrained: yes

При нажатии кнопки "сохранить" появится сообщение об ошибке:
"file /usr/local/lsws/conf/vhosts/test/vhconf.conf does not exist. CLICK TO CREATE"
Потребуется кликнуть мышкой предлагаемую гиперссылку, после чего LiteSpeed исправит ошибку: сам создаст файл для хранения конфигурации хоста.
Снова жмем "сохранить". Хост создан.
Жмем на выделенное цветом название хоста "test", чтобы попасть в подробное меню свойств.

Переходим на вкладку «general». Для редактирования параметров находим кнопку "edit" (она снова справа сверху от группы параметров "general") и нажимаем ее.
Прописываем относительный путь к папки с документам, расположенной внутри рабочей папки хоста:

  • Document Root: $VH_ROOT/html/

Там же можно указать имя домена в параметре Domain Name, если планируется иметь несколько хостов на том же VDS, иначе все обращения по определенному адресу IP и порта, соответствующие связанному "слушателю", будут передаваться на общий хост вне зависимости от направленного доменного имени.
Сохраняем изменения.

На той же вкладке в группе "index files" аналогичным образом присваиваем значения параметрам:

  • Use Server Index Files: yes
  • Index Files: index.php

Снова сохраняем изменения.
Теперь LiteSpeed, получив запрос со ссылкой на папку, будет находить и обрабатывать находящийся в ней индексный файл "index.php".

На вкладке "Script handler" добавляем новый элемент кнопкой "add" и присваиваем ему параметры:

  • Suffixes: php
  • Handler Type: LiteSpeed SAPI
  • Handler Name: [server level] lsphp7

В результате мы направляем обработку файлов с расширением "php" на ранее подключенный интерпретатор PHP 7.

На вкладке "Rewrite" присваиваем параметры:

  • Enable Rewrite: yes
  • Rewrite Rules:
RewriteRule ^/index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Сохраняем изменения.
В результате мы создали стандартное правило перезаписи, по которому запросы к несуществующим файлам будут перенаправляться в индексный файл, который и будет их обрабатывать.

Возвращаемся в раздел "Listeners", щелкаем на название "main"
Во вкладке "general" в группе параметров "Virtual Host Mappings" жмем кнопку "add" и добавляем параметры:

Virtual Host: test
Domains: *

Сохраняем изменения.
В результате созданный нами "слушатель" с именем main будет работать с виртуальным хостом test вне зависимости от имени домена.    

Для того, чтобы применить все изменения в конфигурации LiteSpeed, перезапускаем LiteSpeed командой "gracefull restart" в меню, или командой в консоли:

service lsws restart

Нужно отметить, что для опытного администратора было бы проще и быстрее изменить все приведенные настройки, редактированием текстовых файлов, расположенных в папке /usr/local/lsws/conf,  но при этом проделанные действия были бы лишены проверки корректности значений и наглядности работы. 

Дальнейшие настройки

Для проверки работы созданного хоста и корректности в связке с PHP создадим тестовый файл в папке нового хоста:

nano /var/www/test/html/index.php

с текстом:

<?php
phpinfo();
?>

Если все работает корректно, то перейдя в браузере на страницу  http://xx.xx.xxx.xxx, где вместо xxx указан IP адрес веб-сервера, вы увидите стандартную страницу "PHPinfo" с указанием параметров 7-й версии PHP:

phpinfo

Корректируем параметры PHP по вкусу:

nano /usr/local/lsws/lsphp70/etc/php/7.0/litespeed/php.ini

В частности, в этом файле для исправления настройки безопасности рекомендуется раскомментировать строку с текстом:

cgi.fix_pathinfo=1

При необходимости также корректируем дополнительные параметры, необходимые для корректной работы CMS, например, увеличиваем максимальный размер загружаемого файла и максимальное время исполнения PHP-скрипта: 

upload_max_filesize = 100M
max_execution_time = 200

Для вступления в силу изменений перезапускаем LiteSpeed:

service lsws restart

Теперь вместо тестового файла можно переносить рабочие файлы CMS, переносить, или устанавливать базу данных, производить инсталляцию и т.д.
Чтобы избежать ошибок доступа сервера LiteSpeed, возникающих при записи в эти файлы, после переноса и распаковки файлов от имени root-пользователя, делаем хозяином файлов пользователя nobody из группы nobody, от которого работает сервер LiteSpeed:

chown -R nobody:nobody /var/www/

При необходимости отправки электронной почты с сайта (письма о регистрации, рассылка новостей, уведомления администратору и т.п.) устанавливаем почтовый сервер:

yum install exim

Заключение

LiteSpeed быстро развивается. Поэтому со временем приведенные инструкции могут оказаться не верны для его актуальной версии, например, изменятся адреса репозитариев и обозначения версии пакетов версий.В этом случае необходимые коррективы можно будет найти в официальной документации.

Приведенный выше пример настройки хоста - лишь один из простых вариантов. LiteSpeed позволяет комбинировать "слушатели", хосты, подключаемые приложения, модули и прочие параметры в широких пределах в зависимости от ваших потребностей. 

Источники:

https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:php:apt
https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:php:php-7-installation
http://open.litespeedtech.com/mediawiki/index.php/Help:Administration
http://forum.vkurske.org/index.php?topic=8599.0
https://servernesia.com/926/langkah-instalasi-openlitespeed-1-4-php-7-0/