Як реалізована зв'язка Apache & Nginx у Timeweb
Для багатьох компаній Nginx + Apache + PHP дуже типова і поширена зв'язка, і Timeweb тут не став винятком. Проте розібратися, як саме вона реалізована, може бути цікаво та корисно.
Використання такого зв'язку, звичайно, продиктоване потребами наших клієнтів. І 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 удосконалювалася довгий час: поступово ми виправляли недоліки. Зручно, що її можна зробити без необхідності доопрацьовувати вихідний код.
схема Shared
Схема Dedicated
Dedicated вимагає більше ресурсів, тому її тариф дорожчий для клієнтів. У Dedicated-схемі кожного клієнта піднімається свій, окремий Apache. Ресурси резервуються тут під клієнта, вони виділяються ексклюзивно. Як це працює: сервер має кілька версій PHP. Ми підтримуємо версії 5.3, 5.4, 5.6, 7.1, 7.2, 7.3, 7.4. Так, для кожної версії PHP запускається Apache.
схема Dedicated
Safe zone. Налаштування зон у Nginx
Раніше для Nginx ми використовували багато зон пам'яті, що розділяється (zone) - один блок server на один домен. Таке налаштування потребує великої кількості ресурсів, оскільки для кожного сайту створюється окрема зона. Однак у налаштуваннях Nginx більшість сайтів однотипні, тому їх вдається помістити в одну зону завдяки використанню директив map у модулі ngx_http_map_module, які дозволяють встановити відповідності. Наприклад, ми маємо шаблон зони, в яку ми повинні поставляти змінні: шлях до сайту, версію PHP, користувача. Таким чином, прискорилося перечитування конфігурації Nginx, тобто релоад.
Подібна конфігурація сильно заощадила ресурси оперативної пам'яті та прискорила роботу Nginx.
Reload не пройде!
У Shared-схемі ми позбавилися необхідності перезавантаження (релоада) Apache при змінах в налаштуваннях сайтів. Раніше, коли один клієнт хотів додати домен або поміняти версію PHP, був потрібний обов'язковий релоад Apache, що призводило до затримок у відповідях і негативно позначалося на продуктивності сайтів.
Ми позбулися релоадів шляхом створення динамічних конфігурацій. Завдяки
Конфігурація схеми Shared
А як же Docker?
Багато компаній перейшли на систему, що базується на контейнерах. Timeweb зараз розглядає можливість такого переходу. Безумовно, у кожному рішенні можна знайти плюси та мінуси.
Поряд із незаперечними перевагами, у контейнерній системі користувачеві надано менше ресурсів. У Timeweb, завдяки описаній схемі роботи хостингу, користувач не має обмеження в оперативній пам'яті. Він одержує більше ресурсів, ніж у контейнері. Крім того, у користувача може бути завантажено більше модулів Apache.
Timeweb забезпечує роботу близько 500 тисяч сайтів. Ми несемо велику відповідальність і не вносимо миттєвих, невиправданих змін у складну архітектуру. Зв'язка Apache & Nginx надійна та перевірена часом. Ми, у свою чергу, намагаємося досягти максимальної продуктивності завдяки унікальним конфігураціям.
Для якісної та швидкої роботи великої кількості сайтів потрібно використовувати шаблонну та динамічну конфігурацію Apache та Nginx. Вона дозволяє легко і швидко адмініструвати велику кількість однотипних серверів.
Джерело: habr.com