Apache & Nginx. Пов'язані одним ланцюгом

Як реалізована зв'язка Apache & Nginx у Timeweb

Для багатьох компаній Nginx + Apache + PHP дуже типова і поширена зв'язка, і Timeweb тут не став винятком. Проте розібратися, як саме вона реалізована, може бути цікаво та корисно.

Apache & Nginx. Пов'язані одним ланцюгом

Використання такого зв'язку, звичайно, продиктоване потребами наших клієнтів. І Nginx та Apache грають особливу роль, кожен вирішує певне завдання.

Основні налаштування Apache виконуються в конфігураційних файлах самого Apache, а налаштування клієнтських сайтів відбуваються через файл .htaccess. .htaccess - конфігураційний файл, в якому клієнт може самостійно налаштувати правила та поведінку веб-сервера. Така настройка буде ставитись безпосередньо до його сайту. Наприклад, завдяки функціоналу Apache, користувачі можуть змінювати режим роботи в рамках однієї версії PHP з mod_php на mod_cgi; можна настроювати редиректи, оптимізацію для SEO, зручний URL, деякі ліміти для PHP.

Nginx використовується як проксі-сервер для перенаправлення трафіку на Apache та як веб-сервер для віддачі статичного контенту. Також для Nginx ми розробили модулі безпеки, які дозволяють захистити дані наших користувачів, наприклад розділити права доступу.

Припустимо, що якийсь користувач заходить на сайт нашого клієнта. Спочатку користувач потрапляє на Nginx, що віддає статичний контент. Це миттєво. Потім, коли справа доходить до завантаження PHP, Nginx перенаправляє запит на Apache. І Apache разом із PHP вже генерує динамічний контент.

Особливості зв'язки Apache & Nginx у Timeweb

На нашому віртуальному хостингу реалізовано 2 основні схеми роботи Apache & Nginx: Shared та Dedicated.

Схема Shared

Ця схема використовується більшість користувачів. Її відрізняє простота та ресурсомісткість: Shared-схема використовує менше ресурсів, тому і її тариф дешевший. Згідно даної схеми на сервері запущений один Nginx, який дозволяє обслуговувати всі запити користувача, і кілька екземплярів Apache.

Схема Shared удосконалювалася довгий час: поступово ми виправляли недоліки. Зручно, що її можна зробити без необхідності доопрацьовувати вихідний код.

Apache & Nginx. Пов'язані одним ланцюгом
схема Shared

Схема Dedicated

Dedicated вимагає більше ресурсів, тому її тариф дорожчий для клієнтів. У Dedicated-схемі кожного клієнта піднімається свій, окремий Apache. Ресурси резервуються тут під клієнта, вони виділяються ексклюзивно. Як це працює: сервер має кілька версій PHP. Ми підтримуємо версії 5.3, 5.4, 5.6, 7.1, 7.2, 7.3, 7.4. Так, для кожної версії PHP запускається Apache.

Apache & Nginx. Пов'язані одним ланцюгом
схема Dedicated

Safe zone. Налаштування зон у Nginx

Раніше для Nginx ми використовували багато зон пам'яті, що розділяється (zone) - один блок server на один домен. Таке налаштування потребує великої кількості ресурсів, оскільки для кожного сайту створюється окрема зона. Однак у налаштуваннях Nginx більшість сайтів однотипні, тому їх вдається помістити в одну зону завдяки використанню директив map у модулі ngx_http_map_module, які дозволяють встановити відповідності. Наприклад, ми маємо шаблон зони, в яку ми повинні поставляти змінні: шлях до сайту, версію PHP, користувача. Таким чином, прискорилося перечитування конфігурації Nginx, тобто релоад.

Подібна конфігурація сильно заощадила ресурси оперативної пам'яті та прискорила роботу Nginx.

Reload не пройде!

У Shared-схемі ми позбавилися необхідності перезавантаження (релоада) Apache при змінах в налаштуваннях сайтів. Раніше, коли один клієнт хотів додати домен або поміняти версію PHP, був потрібний обов'язковий релоад Apache, що призводило до затримок у відповідях і негативно позначалося на продуктивності сайтів.

Ми позбулися релоадів шляхом створення динамічних конфігурацій. Завдяки mpm-itk (модулю Apache) кожен процес виконується від окремого користувача, що підвищує рівень безпеки. Такий спосіб дозволяє передавати з Nginx в Apache2 дані про користувача та його document_root. Таким чином, Apache не містить конфігурації сайтів, він отримує їх динамічно, і релоади більше не потрібні.

Apache & Nginx. Пов'язані одним ланцюгом
Конфігурація схеми Shared

А як же Docker?

Багато компаній перейшли на систему, що базується на контейнерах. Timeweb зараз розглядає можливість такого переходу. Безумовно, у кожному рішенні можна знайти плюси та мінуси.

Поряд із незаперечними перевагами, у контейнерній системі користувачеві надано менше ресурсів. У Timeweb, завдяки описаній схемі роботи хостингу, користувач не має обмеження в оперативній пам'яті. Він одержує більше ресурсів, ніж у контейнері. Крім того, у користувача може бути завантажено більше модулів Apache.

Timeweb забезпечує роботу близько 500 тисяч сайтів. Ми несемо велику відповідальність і не вносимо миттєвих, невиправданих змін у складну архітектуру. Зв'язка Apache & Nginx надійна та перевірена часом. Ми, у свою чергу, намагаємося досягти максимальної продуктивності завдяки унікальним конфігураціям.

Для якісної та швидкої роботи великої кількості сайтів потрібно використовувати шаблонну та динамічну конфігурацію Apache та Nginx. Вона дозволяє легко і швидко адмініструвати велику кількість однотипних серверів.

Джерело: habr.com

Додати коментар або відгук