Конфигурация web сервера
Содержание
Поддерживаемое ПО
На данный момент ISPmanager работает со следующими серверами:
- Nginx версии не ниже 1.1.15
- Apache 2.2
На windows системах ISPmanager работает только с Microsoft IIS.
Отличия от предыдущей реализации
- Информация о настройках web домена хранится во внутренней базе ISPmanager. Т.е. никакие изменения, вносимые в конфиги вручную, не влияют на состояние, отображаемое в панели, и могут быть потеряны при изменении параметров из панели, если настройки, сделанные вручную, и настройки, сделанные из панели, конфликтуют. Тем не менее вы можете вносить изменения в конфигурацию сервера вручную. Эти изменения будут сохранены при редактировании домена, если это возможно.
- Все настройки отдельного web домена находятся в отдельном файле. Файлы раскладываются по каталогам по имени владельца домена
- Настройки доступа к каталогам (diraccess) записываются в конфиг web сервера, в тот же файл что и настройки соответствующего web домена (раньше для этого использовался .htaccess)
- PHP может работать как через apache, так и через nginx (используется php-fpm). В связи с тем, что появилась возможность пользоваться php, не используя apache, при совместном использовании apache и nginx сервер apache может быть не запущен, если запрос может быть обработан средствами nginx.
- Появилась возможность использовать несколько IP адресов для web домена
- При включении SSL в настройках nginx создается отдельная секция server
- Для ротации журналов запросов и ошибок используется 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