Php в режимі fastcgi засобами патча php-fpm nginx, for unix users

PHP в режимі FastCGI засобами патча PHP-FPM + Nginx

Високої продуктивності веб-сервера можна досягти використовуючи в якості front-end Nginx, а в якості back-end PHP-FastCGI-сервер.

Переваги Nginx і FastCGI:

- Nginx легкий, простий в налаштуванні, є проксі-сервером, дуже швидкий.
- FastCGI це найшвидший і найбільш безпечний спосіб обробки запитів зовнішніми програмами.

При такій схемі можливо обробляти велику кількість запитів за невеликий час. Nginx може використовуватися як самостійний HTTP-сервер або як reverse proxy перед Apache або будь-яким іншим важким веб-сервером, щоб зняти частину навантаження. Apache при цьому виступає в якості бек-енду для генерації динамічного контенту, але Apache досить громіздкий і важкий, до того ж він вимагає багато пам'яті.

Безліч запитів до веб-сервера породжують багато паралельних потоків / процесів, які утримуються в пам'яті, поки клієнтське з'єднання не буде закрито. Тому доцільно використовувати nginx для прийому з'єднань і віддачі статики, а обробку динаміки передавати «головному» сервера. Для обробки динаміки в nginx використовується проксінг і FastCGI. Кешування і віддача статики виконується самим nginx. Все буде працювати абсолютно прозоро для вже написаних скриптів.
Для вказівки які статичні файли буде віддавати nginx можна створити секцію з таким location:

Для перенаправлення всіх запитів до файлів .php на певний tcp-порт, прослуховується FastCGI-сервером, потрібно в файлі конфігурації nginx.conf створити окрему секцію location:

Проблема CGI програм в тому, що вони повинні бути перезапущена веб-сервером при кожному запиті, що призводить до зниження продуктивності. CGI програми з'єднані з сервером через pipe'и. У порівнянні з CGI протокол FastCGI є більш продуктивним і безпечним, який не витрачає час на створення fork-ів (нових процесів). FastCGI-процеси використовують Unix Domain Sockets або TCP / IP для зв'язку з сервером.

При використанні PHP як CGI виділяються такі переваги:

- доступна індивідуальна настройка PHP для користувача;
- виконання скриптів з правами користувача;
- менша витрата оперативної пам'яті, ніж при використанні PHP, як модуль apache;
- помилки в скриптах не призводять до падіння веб-сервера на відміну від режиму PHP, як модуль apache.

При використанні PHP як FastCGI:

- за рахунок кешування деяких проміжних даних скрипт не тлумачиться кожен раз при виконанні і досягається більш висока швидкість в порівнянні з PHP як CGI;
- є більш безпечним, як з точки зору прав доступу, так і з точки зору наявності помилок в роботі сторонніх скриптів.

Запуск вбудованого в PHP сервера FastCGI - метод, який не потребує ніяких додаткових утиліт. Для цього використовується команда:

Запуск PHP всередині будь-якого стороннього обробника запитів - цей варіант може бути більш зручним так як має велику гнучкість в налаштуванні. Контролювати процес FastCGI зовнішніми програмами можна, наприклад, такими, як spawn-fcgi, щоб запустити FastCGI процес в своєму оточенні, виставити йому user-id, group-id і змінити кореневу директорію (chroot).

На даний момент в портах FreeBSD можна знайти при компіляції php5 5.3.3_2 або php52 5.2.14_1 опцію «[X] FPM» - це, що входить безпосередньо, патч для PHP, тобто немає тепер необхідності завантажувати з вихідних або з портів і патчить або використовувати spawn-fcgi.
PHP FastCGI Process Manager (php-fpm) розроблений для забезпечення високої стабільності роботи. Зазвичай використовується з nginx в проектах з високими навантаженнями або дефіцитом ресурсів. Використовуючи nginx і php-fpm можна отримати велику економію пам'яті сервера і високу продуктивність.
Php-fpm - це високопродуктивний і масштабований інтерфейс, що усуває ряд проблем, що заважають використовувати PHP в режимі FastCGI.

Для додавання в автозавантаження на FreeBSD:

Конфігураційний файл - /usr/local/etc/php-fpm.conf. Починаючи з версії 5.3.3 конфиг php-fpm має формат ближчий до формату php.ini. У версіях нижче - в xml-форматі.
Налаштування в конфігурації діляться на глобальні і настройки пулів. Скільки користувачів стільки пулів. Загальна структура:

права для unix socket, якщо він використовується. У Linux права на читання / запис повинні бути налаштовані таким чином, щоб веб-північ міг підключитися. Багато BSD-системи дозволяють підключення незалежно від прав. За замовчуванням: 0666

установка стилю контролювання числа робочий процесів. Допустимі значення 'static' і 'apache-like'. За замовчуванням «static». Зауваження: тільки 'static' працює в даний час.

встановлює ліміт на кількість одночасних запитів, які будуть обслуговуватися. Використовується з будь-яким стилем контролювання числа робочих процесів.

час (в секундах) для обслуговування одного запиту, після чого робочий процес буде зупинено. Використовується, коли 'max_execution_time' не зупиняє виконання скрипта на якоїсь причини. За замовчуванням: «5s». Зауваження: '0s' рівноцінно 'off'

час (в секундах) для обслуговування одного запиту після якого php backtrace скидається в журнал повільних запитів. За замовчуванням: «5s». Зауваження: '0s' рівноцінно 'off'

скільки запитів кожен процес повинен обробити до перезапуску. Дозволяє обійти обліковці пам'яті в сторонніх бібліотеках. Для нескінченної обробки запитів, вкажіть 0. Еквівалент змінної оточення PHP_FCGI_MAX_REQUESTS.