Конфигурация web сервера

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

Поддерживаемое ПО

На данный момент ISPmanager работает со следующими серверами:

  • Nginx версии не ниже 1.1.15
  • Apache 2.2

На windows системах ISPmanager работает только с Microsoft IIS.

Отличия от предыдущей реализации

  1. Информация о настройках web домена хранится во внутренней базе ISPmanager. Т.е. никакие изменения, вносимые в конфиги вручную, не влияют на состояние, отображаемое в панели, и могут быть потеряны при изменении параметров из панели, если настройки, сделанные вручную, и настройки, сделанные из панели, конфликтуют. Тем не менее вы можете вносить изменения в конфигурацию сервера вручную. Эти изменения будут сохранены при редактировании домена, если это возможно.
  2. Все настройки отдельного web домена находятся в отдельном файле. Файлы раскладываются по каталогам по имени владельца домена
  3. Настройки доступа к каталогам (diraccess) записываются в конфиг web сервера, в тот же файл что и настройки соответствующего web домена (раньше для этого использовался .htaccess)
  4. PHP может работать как через apache, так и через nginx (используется php-fpm). В связи с тем, что появилась возможность пользоваться php, не используя apache, при совместном использовании apache и nginx сервер apache может быть не запущен, если запрос может быть обработан средствами nginx.
  5. Появилась возможность использовать несколько IP адресов для web домена
  6. При включении SSL в настройках nginx создается отдельная секция server
  7. Для ротации журналов запросов и ошибок используется logrotate

Настройка web-сервера

Следующая группа параметров используется вне зависимости от того, какой web сервер вы используете

path php-cgi <полный путь>
Путь до исполняемого файла php-cgi
path php_open_basedir <список путей через двоеточие>
Значение open_basedir для php, которое будет использовано для web доменов. Вы можете использовать макрос __home__ чтобы добавить в строку путь до домашнего каталога пользователя
WebDefaultAliases <список алиасов>
Набор дополнительных имен, которые будут предложены автоматически при создании web домена. Вы можете использовать макрос __name__, чтобы подставить в строку основное имя домена
BackendBind <ip адрес+порт>
Адрес, на котором будет поднят backend (web сервер, на который будет передавать запросы frontend сервер). При одновременной установке nginx и apache backend - apache.
WebModules <список модулей>
Список используемых web серверов
WebUser <имя>
Имя пользователя, с правами которого работает web сервер (необходимо указывать именно имя, а не uid)
WebGroup <имя>
Группа, с правами которой работат web сервер (необходимо указывать именно имя, а не gid)
WebRestartDelay <секунды>
Минимальное время, которое должно проходить между перезапусками web сервера
ApsExtRepository <URL репозитария>
Путь до xml-файла внешнего репозитория APS
Option ApsRepositoryUpdated
Наличие этой опции указывает, что при старте панели управления не нужно выполнять обновления списка APS-скриптов

Список доступных кодировок web домена берется из файла etc/charset. По умолчанию в нем указана только utf-8.

Настройка Apache

Во время запуска панели происходит опрос загруженных модулей apache. Так мы определяем список возможных настроек

cgi_module
возможность работы с CGI скриптами
fastcgi_module или fcgid_module
возможность работы с php в режиме fastcgi
php5_module
возможность работы c php через модуль apache

Если есть поддерка CGI и найден файл, указанный в path php-cgi, появляется возможность работы с php в режиме CGI

Далее приведен список параметров, используемых для настройки панели под конкретную конфигурацию apache.

Option ApacheITK
Добавляется, если используется apache ITK. При этом в конфиг вместо директивы SuexecUserGroup пишется AssignUserID
path apachectl <имя>
Путь до программы/скрипта, используемого для перезапуска apache. Должен уметь обрабатывать следующие параметры: -M (получить список модулей), graceful (мягкая перезагрузка), restart (жесткая перезагрузка, используется при добавлении/удалении IP адресов)
path apache-vhosts <каталог>
Имя каталога, в котором будут создаваться файлы с настройками web доменов
path apache.conf <путь>
Путь до основного файла конфигурации apache. В него будут записываться директивы Listen и NameVirtualHost
ApacheWidePorts <спикок портов>
Для указанных портов в apache будет добавляется Listen для всех IP адресов сервера. По умолчанию: 80 443. Это позволяет уменьшить количество жестких перезапусков apache.

Настройка Nginx

Во время запуска панели проверяется наличие сервиса php-fpm. Если он найден, будет доступно использовать в настройках web доменов php в режиме fastcgi.

Далее приведен список параметров, используемых для настройки панели под конкретную конфигурацию nginx.

path nginx-vhosts <каталог>
Имя каталога, в котором будут создаваться файлы с настройками web доменов
path nginx-vhosts-includes <список каталогов>
Пути до файлов с дополнительными настройками, которые будут добавлены в секцию server каждого web домена (используется директива Include)
path fpm-pool.d <каталог>
Имя каталога, в котором будут создаваться файлы с настройками php-fpm
path fpm-service <имя>
Имя сервиса php-fpm. Используется для его перезапуска при добавлении новых пользователей.
path nginx-static <регулярное выражение>
Используется для определения файлов, которые nginx должен отдавать самостоятельно.
path nginxctl <команда>
Используется для перезапуска nginx при добавлении новых web доменов. Должна обрабатывать параметры: reload (перечитать настройки web доменов), restart (перезапустить nginx, используется при добавлении/удалении IP адресов), stop/start (запустить nginx, используется при конвертации настроек в случае добавления/удаления web сервера)
path nginx-configtest <команда>
Используется для проверки корректности содержимого конфигурационных файлов Nginx. По умолчанию равна [path nginxctl] configtest
path nginx <команда>
Используется при запуске панели для проверки работоспособности nginx. Должна корректно обрабатывать параметр -V
ForwardedSecret <строка>
Используется для защиты от подделки IP адреса.

ForwardedSecret

В случае, если вы переправляете запросы из nginx в панель, мы определяем обратный адрес по HTTP заголовку X-Forwarded-For. Злоумышленник получает возможность подменить обратный адрес, используя этот заголовок, что, в свою очередь, позволяет ему воспользоваться чужими COOKIE для выполнения запросов от имени другого пользователя. Панель игнорирует заголовок X-Forwarded-For, если запрос не содержит заголовка X-Forwarded-Secret с таким же значением, как то, что записано в конфиге.

Перезапуск web сервера

Попытка перезапуска web сервера происходит через 2 секунды после последнего изменения настроек. Если в течение этого времени происходят другие изменения, то перезапуск будет отложен еще на 2 секунды. Дополнительно вы можете задать параметр WebRestartDelay - минимальную задержку между последовательными перезапусками web сервера.

В случае, если изменения не затрагивали списка прослушиваемых IP адресов/портов, делается мягкая перезагрузка web сервера, в противном случае сервер перезапускается полностью.

Шаблоны конфигурационных файлов web-сервера

Для того, чтобы администратор сервера мог влиять на формирование конфигурационных файлов web-сервера для конкретного web-домена, реализованы шаблоны конфигурационных файлов, создаваемых ISPmanager 5.

Шаблоны не переопределяют тех настоек, что производит ISPmanager, а лишь позволяют добавлять дополнительные строки.

Файлы шаблонов находятся:

  • etc/templates/apache-vhost.template - шаблон файла конфигурации web-домена для web-сервера Apache
  • etc/templates/nginx-vhost.template - шаблон файла конфигурации web-домена для web-сервера Nginx

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

Макросы имеют вид: __{ИМЯ_ПАРАМЕТРА}__, имена параметров всегда полностью в верхнем регистре

В качестве имени параметра может быть использован любой параметр сессии панели управления (имеется ввиду сессия запроса на создание или изменение web-домена), написанный в верхнем регистре, также имеются дополнительные параметры.

Примеры макросов для параметров сессии:

  • __NAME__ - имя web-домена
  • __OWNER__ - имя пользователя-владельца web-домена
  • __ALIASES__ - список псевдонимов web-домена
  • __EMAIL__ - email администратора web-домена
  • __DIRINDEX__ - список индексных страниц web-домена
  • __CHARSET__ - кодировка страниц web-домена по умолчанию


Дополнительные макросы:

  • __HOSTNAME__ - доменное имя сервера, на котором установлена панель управления
  • __LISTEN_ON__ - список пар типа IP-адрес:порт, используемых web-доменом

Пример

Чтобы добавить в location / сервера строки, составим следующий шаблон

server {	
  server_name __NAME__ __ALIASES__;        
  location / {        
  try_files $uri $uri/ /index.php?$args;        
  rewrite /wp-admin$ $scheme://$host$uri/ permanent;      
}


Обратите внимание, строка server_name __NAME__ __ALIASES__; должна обязательно присутствовать в шаблоне, иначе ISPmanager не определит в какой server добавить данные и добавить еще один server в конец файла.

Ротация журналов

Все журналы web сервера записываются в каталог httpd-logs, недоступный пользователям. В домашнем каталоге пользователя создается каталог logs куда создаются жесткие ссылки на журналы посещений и ошибок web доменов пользователя. Кроме того, в каталог logs сохраняются старые копии журналов после ротации.

ISPmanager 5 использует logrotate для ротации журналов web сервера.

path logrotate.d <каталог>
Указывает каталог, куда будут сохраняться настройки logrotate (отдельные файлы для каждого web домена)

Анализаторы журналов

Теоретически, ISPmanager может работать с любыми анализаторами журналов. На данный момент через интерфейс могут быть установлены:

  • awstats
  • webalizer
path analyzer.d <каталог>
Указывает каталог, куда будут сохраняться скрипты для анализа журналов (отдельные файлы для каждого web домена)

При установке анализатора журналов в конфиг панели записывается следующая секция:

Analyzer awstats {
  ConfPath /etc/awstats/awstats.__NAME__.conf
  BinPath /usr/lib/cgi-bin/awstats.pl
  Lang en
  Lang ru
}
ConfPath
указывает путь, куда будут сохраняться настройки анализатора для конкретного web домена
BinPath
указывает путь до исполняемого файла
Lang
указывает поддерживаемые языки. Секция Analyzer может содержать любое количество таких строк

При включении анализатора журналов из каталога etc/template берется соответствующий шаблон скрипта (имя файла совпадает с именем анализатора). В нем происходит подстановка всех макросов (список макросов можно узнать, включив дебаг для модуля web) и копируется в каталог analyzer.d. Дополнительно формируется конфиг. Из etc/template берется соответствующий файл с расширением .conf, в нем так же заменяются все макросы и он сохраняется в файл, имя которого указано в ConfPath (вместо __NAME__ подставляется имя web домена).

Полученный скрипт вызывается всякий раз про ротации журнала через logrotate. Если вы задали переодический анализ, вызов этого скрипта будет добавлен в планировщик.

Для правильной настройки оборажения статистики при настройке web-домена также используются следующие параметры конфигурационного файла панели управления:

  • AwstatsEncoding - кодировка генерируемых awstats html-страниц отчетов
  • WebalizerEncoding - кодировка генерируемых webalizer html-страниц отчетов

По умолчанию данные параметры имеют значение "utf-8"

Переконфигурирование web-сервера

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

Внимание! Данное действие не сохранит изменения в конфигурационных файлах, внесенные вручную! 

Для выполнения операции последовательно нужно выполнить следующие функции:

webreconfigure.initialize с параметром shutdown=on
webreconfigure.restore

Пример выполнения с помощью mgrctl:

/usr/local/mgr5/sbin/mgrctl -m ispmgr webreconfigure.initialize shutdown=on
/usr/local/mgr5/sbin/mgrctl -m ispmgr webreconfigure.restore