Веб-система
Материал из DiPHOST.Ru wiki system
Веб-система хостинга состоит из двухуровневой системы веб-серверов. Внешний уровень принимает запросы из сети, пересылает его на внутренний уровень, читает ответ и отдаёт его в сеть. Такая схема позволяет разгрузить внутренний уровень за счёт его независимости от скорости сегментов сети Интернет и гибко управлять внутренним уровнем системы, распределяя запросы извне к веб-серверам внутреннего уровня с различной, иногда несовместимой между собой, функциональностью.
Содержание |
Внешний уровень. nginx
Для внешнего уровня веб-системы выбран веб-сервер nginx. Веб-сервер nginx очень производительный, не требовательный к ресурсам и позволяет создавать гибкие конфигурации, хотя и не обладает возможностью исполнять скрипты на php, perl, python и прочих языках.
На внешнем уровне выполняются следующие задачи:
- приём запросов по протоколу HTTP из сети;
- приём запросов по протоколу HTTPS из сети, обеспечение установки SSL-соединения;
- борьба с DDoS, обработка аварийных ситуаций;
- выбор сервера внутреннего уровня;
- передача пришедших запросов на внутренний уровень без кеширования (т.е. передаются абсолютно все запросы) по протоколу HTTP;
- чтение ответов и передача их без кеширования (т.е. всегда отдаётся ответ внутреннего уровня, не сохраняется никаких копий) в сеть.
Для каждого сайта создаётся отдельная конфигурация в nginx, что позволяет направлять запросы из сети к выделенному вплоть до сайта веб-серверу внутреннего уровня. Также предусмотрена возможность применять уникальные конфигурации для каждого сайта по запросу в службу поддержки. Возможность создавать уникальные конфигурации позволяет обеспечивать SSL-доступ к сайтам.
Внутренний уровень. apache
Для внутреннего уровня веб-системы выбран веб-сервер apache. Веб-сервер apache является самым популярным в мире веб-сервером, обслуживающим сайты. К нему существует множество расширений, позволяющих исполнять программы на различных языках программирования, применять различные технологии для создания содержимого сайтов. Некоторые из предоставляемых технологий (например, приложения на языке Python) не хуже, а иногда возможно и лучше, предоставлялись бы с использованием иных веб-серверов. Но мы выбрали apache, ввиду стандартности конфигурирования и возможности частично конфигурировать его пользователем самостоятельно через файл .htaccess.
Для каждой поддерживаемой технологии (точнее, для пары технология/версия) запускается свой веб-сервер apache для каждого системного аккаунта с его привилегиями, один экземпляр на все сайты аккаунта с заявленной технологией.
Поддерживаются следующие технологии и их версии:
- PHP версий 5.2 и 5.3, для версии PHP 5.2 возможен режим с ZendOptimizer, выключенный по умолчанию, для серверов с PHP также поддерживается и запуск CGI-скриптов;
- WSGI для Python версий 2.5, 2.6, 2.7 и 3.1.
Т.е. если у пользователя хостинга есть сайт на php 5.2 закодированный ZendOptimizer, есть три сайта на php 5.3 и есть тестовый WSGI-сайт на python 2.7, то будет запущено три выделенных apache для обработки вышеперечисленных пяти сайтов аккаунта.
Выполнение скриптов PHP всех версий обеспечивается стандартным модулем php для веб-сервера apache. Для каждой версии PHP на каждом аккаунте запускается свой сервер с модулем для этой версии. Невозможно работать с PHP разных версий в рамках одного сайта. Для включения или отключения ZendOptimizer используется два разных php.ini, выбор которых делается при запуске веб-сервера. Apache запускается в режиме preforked (обработчики - отдельные процессы).
Выполнение CGI-программ обеспечивается только веб-серверам, настроенными для работы с PHP (при этом CGI-программы могут быть на любом другом поддерживаемом языке).
Работа приложений на языке Python обеспечивается модулем mod_wsgi для веб-сервера apache в режиме "демона". Для каждой версии Python на каждом аккаунте запускается свой сервер с модулем для этой версии. Невозможно работать с Python разных версий в рамках одного сайта. Apache запускается в режиме worker (обработчик - один процесс и множество тредов), поскольку обработка приложений осуществляется отдельными процессами, запускаемыми модулем mod_wsgi. Максимальное количество "нитей" apache несколько выше, чем обработчиков приложения. Ограничения в спецификации относятся к обработчикам приложения, а не к самому веб-серверу apache.
Число обработчиков каждого веб-сервера является постоянным и зависит от выбранного тарифа, определяемые в спецификации виртуальной площадки.