У попередній статті "Установка та налаштування веб сервера Nginx в якості проксірующего фронтендів до Apache", було розглянуто простий варіант установки і використання Nginx. з настройками за замовчуванням, як проксірующего сервера, з сервером Apache в якості проксіркемого бакенда.
В даному матеріалі хотілося-б розповісти про більш складному варіанті установки і настройки Nginx. для побудови зв'язки Nginx Apache FastCGI. Для організації FastCGI сервера, буде використана утиліти, spawn-fcgi. яка раніше входила до складу веб сервера lighttpd. а тепер виділена в окремий порт.
Схема роботи зв'язки Nginx - Apache - FastCGI. виглядає наступним чином:
- Всі статичні запити (HTML файли, картинки), будуть оброблені веб сервером Nginx самостійно, після чого результат буде виданий клієнту;
- Запити до CGI і Perl (файли CGI, PL) скриптів, будуть відправлені на обробку Apache. після обробки, результат буде переданий в Nginx і відданий клієнту;
- Всі запити до скриптів PHP, будуть перенаправлені на сервер FastCGI, після обробки, результат знову-ж буде повернуто в Nginx і виданий клієнту;
Отже, що ми маємо: операційна система FreeBSD 7.1 STABLE (платформа amd64), встановлений веб сервер Apache / 2.2.9. Установка Nginx проводилася з наступними опціями:
PHP з підтримкою FastCGI інтерфейсу
Налаштування сервера Nginx. зробимо трохи пізніше, спочатку налаштуємо FastCGI сервер, встановивши все необхідне. Що взагалі таке, FastCGI. У загальному розумінні, це протокол взаємодії, між веб сервером і додатком, незалежний від мови додатка і є куди більш продуктивним і безпечним, ніж звичайний CGI. Якщо коротко, звичайну CGI програму, веб сервера, доводиться запускати на кожен запит, в той час як FastCGI. постійно тримає запущений процес, який і обслуговує приходять йому запити. Крім того веб сервер, зв'язується з FastCGI сервером, через так званий "Unix domain socket" або через TCP / IP, на відміну від звичайного CGI, який взаємодіє з сервером через стандартний ввід / вивід, що дає можливість мати у своєму розпорядженні FastCGI сервер, не тільки в рамках однієї машини, а й взагалі де завгодно в мережі.
У контексті даного матеріалу, мова йде про мову PHP, зібраному з підтримкою FastCGI і запущеному з допомогою спеціального додатку.
Для підтримки даного режиму роботи, PHP, повинен бути скомпільовано з відповідними опціями і мати необхідний бінарник (файл, що запускається, за замовчуванням php-cgi.) Наступні опції використовуються для складання PHP з підтримкою FasCGI і забезпечення необхідного рівня безпеки:
--enable-fastcgi
--enable-force-cgi-redirect
--enable-discard-path
Решта опцій ставите в залежності від ваших потреб.
Подивитися опції, з якими зібрано PHP, можна так:
Установка і настройка spawn-fcgi для запуску FastCGI Сарвера PHP
Процес побудови та встановлення триває менше хвилини. По завершенню, буде створено кілька файлів:
/ Usr / local / bin / spawn-fcgi # запускається файл програми
/usr/local/etc/rc.d/spawn-fcgi # Стартовий скрипт, для запуску FastCGI сервера
Як правило я використовую Unix Socket для зв'язку сервера Nginx з FastCGI сервером (хоча в разі виникнення проблем, можна використовувати TCP / IP), тому йдемо правити стартовий скрипт, привівши його змінні до такого виду:
Не забуваємо додати рядок spawn_fcgi_enable = "YES" у стартовий скрипт /etc/rc.conf. для запуску FastCGI сервера при старті системи.
Пробуємо запустити spawn-fcgi:
FastCGI сервер готовий до роботи
Налаштування веб сервера Apache
Налаштування веб сервера Nginx, на роботу з бакендамі, Apache і FastCGI
Перейдемо до конфігураційного файлу.
Хотілося-б відзначити, що остаточний вигляд конфігураційного файлу Nginx, залежить від вашої конкретної системи, тобто наприклад, різні таймаут, розміри і кількість буферів, що передаються заголовки і т.д. повинні бути встановлені, виходячи із завдань, що вирішуються на даному сервері. Тому давати рекомендації в стилі, "поставте цього стільки а того стільки і напишіть це. Бо у мене це працює.", Вважаю недоречним.
Тут у нас робочий варіант конфігураційного файлу nginx, так би мовити, без наворотів, лише необхідний мінімум. Виглядає він у нас такий спосіб:
Перевіряємо правильність файлу конфігурації:
Все в порядку, можна запускати
Перевіримо що у нас там показує netstat:
і покласти його в кореневу директорію документів сайту. Тепер запросивши його через браузер, ми побачимо сторінку PHP. з купою різної технічної інформації, включаючи опції збірки, настройки, модулі, розширення, конфігураційні файли і т.д. Знаходимо рядок Server API. і бачимо в якому режимі працює PHP на даному хості, це у нас, CGI / FastCGI. тобто, то що нам і було потрібно.
Перевірити, що і решта Location. відпрацьовують належним чином, передаючи запити бакендам, можна так, створити необхідний файл, запросити його через рядок браузера і перевірити лог файли. Тобто, запит до файлу test.pl. можна буде виявити в файлі access.log. віртуального хоста, сервера Apache. а запит до файлу test.html. в лог файлі веб сервера Nginx.
На цьому поки що хотілося-б закінчити. Хай щастить.