Налаштування nginx як frontend до web-серверу apache
У даній статті буде розглянута настройка Nginx з метою підвищення ефективності роботи вашого Web-сервера при значних навантаженнях. Підвищення ефективності досягається використанням легкого Web-сервера nginx, який приймає і обробляє всі запити від користувачів, поправляючи Apache тільки необхідний мінімум. Прямого доступу до Web-серверу Apache користувач не отримує.
Приступимо до налаштування. У моєму випадку настройка проводиться на дистрибутиві Linux Debian 6.0.
Встановлюємо програмне забезпечення:
Після цього міняємо параметри з'єднань, оскільки нам необхідно запустити Apache на іншому порту. У нашому випадку - це 8080, але ви можете використовувати будь-який на ваш смак. Для зміни порту правимо рядки в файлі конфігурації /etc/apache2/ports.conf:
Так само необхідно внести відповідні зміни в файли віртуальних хостів. Для прикладу створимо віртуальний хост sample.ru.
З метою підвищення продуктивності можна відключити Keep Alive з'єднання. Для цього поправимо директиву в файлі /etc/apache2/apache2.conf
Важливо. Якщо у вас дистрибутив Linux не Debian або Ubuntu, то розташування конфігураційних файлів і їх імена можуть відрізнятися. Наприклад, в більшості випадків всі налаштування зберігаються в загальному файлі конфігурації /etc/apache2/httpd.conf. Так само в деяких дистрибутивах Linux і Unix сам Apache може розташовуватися в інших директоріях. Можливі варіанти:
- / Etc / apache2
- / Etc / httpd
- / Usr / local / etc / apache2
- / Usr / local / etc / httpd
- / Usr / local / etc / www
- / Usr / local / apache2
- / Usr / local / httpd
- / Usr / local / www
Це ті варіанти, які мені зустрічалися в практиці на різних платформах. Далі, всі налаштування будуть приводитися в прив'язці до дистрибутивів Linux Debian і Linux Ubuntu, а ви самостійно робіть поправку на свій випадок.
Створення віртуального хоста в apache
Створюємо новий файл /etc/apache2/sites-available/sample.ru. У файл поміщаємо наступний текст:
Важливо не забути поставити порт 8080 в директиві VirtualHost!
Активізуємо наш віртуальний хост і перезапускаємо апач:
Вірний REMOTE_ADDR для Apache
Налаштування Nginx
У нашому випадку настройка Nginx буде обмежена мінімальним обсягом роботи, необхідним тільки для ефективної роботи Nginx зв'язки з Apache.
Раніше ми відключили у Apache підтримку Keep Alive. У зв'язці з Nginx такий захід дає відчутний пріпрост продуктивності. Apache обробивши запит і повернувши вміст Nginx, відключається і переходить до обробки інших запитів, а процес Nginx вже самостійно займається відправкою результату користувачеві. Ресурсів процес Nginx практично не споживає, оскільки фактично працює тільки зі статикою. Apache ж може жерти просто величезна кількість ресурсів.
Наведу приклад одного з моїх проектів, який має більше 10 тис. Відвідувачів на добу. Запитів, відповідно до сайту просто колосально кількість. Сайт працює на досить ресурсоємному движку Bitrix. Одне звернення до сайту відхоплює від 300Мб до 2,5Гб оперативної пам'яті. Якщо проект запустити без Front-end, то сайт при поточній завантаженості буде гальмувати по-чорному, якщо взагалі зможе обробляти запити. Що ми отримуємо в результаті роботи зв'язки. Сервер досить потужний, тому навіть ресурсомісткі запити обробляє миттєво. Apache обробивши запит, відразу віддає вміст Nginx і звільняється для обробки наступного запиту. Nginx, обробляючи запит до конкретної сторінці, вже використовує всього 0,5-2Мб оперативної пам'яті. Відчутна різниця! За рахунок цього навантажений проект цілком собі нормально живе. Звичайно, в наведеному прикладі є ще особливості настройки MySQL сервера, але тема настройки MySQL виходить за рамки даної статті. Обов'язково зроблю статтю і на тему базової налаштування MySQL для роботи з Bitrix на великих проектах.
До речі, якщо говорити про Bitrix, то тема настройки Front-end на серверах з сайтами під Bitrix вкрай актуальна, особливо, якщо Інтернет-магазин реалізований на цій CMS. При всій громіздкості Bitrix, ця CMS впевнене набирає популярність, оскільки має масу доповнень для роботи з 1С: Підприємством. Адміністративна частина цілком дружелюбна для користувача, особливо в порівнянні з CMS поширюваними за ліцензією GPL. 1С програмісти можуть створювати вивантаження товарів з 1С: Підприємства в будь-яких розрізах і з будь-якими параметрами керуючись просто стандартами обміну даними 1С.
Отже, перейдемо безпосередньо до налаштування.
Основний конфігураційний файл Nginx /etc/nginx/nginx.conf
Власне, тут робимо мінімальні зміни. Якщо якихось директив у вас не вистачає, просто додайте їх до відповідних розділів файлу. Трохи нижче я роз'ясню призначення деяких директив та їх значень.
Методи обробки з'єднань директива use розділу events
З вибором методу обробки з'єднань потрібно бути уважним. Різні методи підтримуються різними операційними системами. nginx підтримує різні методи обробки з'єднань. Якщо на платформі є відразу кілька методів, nginx зазвичай сам вибирає найбільш ефективний метод. Однак, при необхідності можна явно вибрати метод обробки з'єднань за допомогою директиви use. Якщо не впевнені, краще директиву взагалі відключити.
Підтримуються наступні методи обробки з'єднань:
- select - стандартний метод. Модуль для підтримки цього методу збирається автоматично, якщо на платформі не виявлено більш ефективного методу. Можна примусово дозволити або заборонити збірку цього модуля за допомогою параметрів -with-select_module і -without-select_module.
- poll - стандартний метод. Модуль для підтримки цього методу збирається автоматично, якщо на платформі не виявлено більш ефективного методу. Можна примусово дозволити або заборонити збірку цього модуля за допомогою параметрів -with-poll_module і -without-poll_module.
- kqueue - ефективний метод, який використовується під FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 і Mac OS X. У багатьох російськомовних посібниках з налаштування Nginx в якості Front-end для Apache зустрічається вказівку саме цього методу, оскільки більшість статей тупо перекладні і спочатку писалися админами FreeBSD або OpenBSD.
- epoll - ефективний метод, який використовується в Linux 2.6+. У деяких старих дистрибутивах, наприклад SuSE 8.2, є патчі для підтримки epoll ядром 2.4.
- rtsig - real time signals, ефективний метод, який використовується в Linux 2.2.19+. За замовчуванням в загальносистемної черги подій може одночасно знаходитися не більше 1024 сигналів. На навантажених серверах може знадобитися збільшити розмір черги за допомогою параметра ядра / proc / sys / kernel / rtsig-max. Однак, починаючи з Linux 2.6.6-mm2, цього параметра вже немає і для кожного процесу існує окрема черга сигналів, розмір якої обмежується за допомогою RLIMIT_SIGPENDING і може бути змінений за допомогою worker_rlimit_sigpending.
- / Dev / poll - ефективний метод, який використовується в Solaris 7 11/99 +, HP / UX 11.22+ (eventport), IRIX 6.5.15+ і Tru64 UNIX 5.1A +. При переповненні черги nginx скидає її і починає обробляти з'єднання за допомогою методу poll до тих пір, поки ситуація не нормалізується.
- eventport - event ports, ефективний метод, який використовується в Solaris 10.
Налаштування віртуального хоста для Nginx
У самого Nginx, як і у Apache є свої віртуальні хости. Тому для нашого сайту нам потрібно вказати віртуальний хост sample.ru. Створюємо файл /etc/nginx/sites-available/sample.ru. У файл поміщаємо вміст:
Тепер активізуємо віртуальний хост і перезапускаємо Nginx:
Підсумок налаштування Nginx в якості Front-end для Apache
Якщо все зробили без помилок, зв'язка повинна запрацювати. На навантажених проектах ефект буде видно відразу.