Nginx включає в себе підтримку технології FastCGI для роботи з зовнішніми серверами і утилітами. PHP теж підтримує FastCGI і може бути використаний для обробки FastCGI-запитів від nginx.
Отже, для початку нам необхідно встановити PHP з підтримкою технології fastcgi і запустити його на будь-якому tcp-порту, на який потім будуть переправлятися запити з nginx. Процес інсталяції може відрізнятися на різних системах, тому я опишу процес складання PHP з вихідного коду як один з найпоширеніших методів. Для того, щоб отримати версію інтерпретатора PHP з підтримкою FastCGI, Ви можете використовувати наступний набір команд:
# ./configure --prefix = / opt / php --enable-fastcgi
Коли ця послідовність команд буде успішно завершена, Ви зможете запустити свій fastcgi-сервер. Але існує два можливих варіанти, як це зробити:
- Запуск вбудованого в PHP сервера FastCGI - метод, який не потребує ніяких додаткових утиліт.
- Запуск PHP всередині будь-якого стороннього обробника запитів - цей варіант може бути більш зручним через більшої гнучкості в налаштуванні.
Якщо Ви вирішили не використовувати ніякого стороннього ПЗ, то можете запустити PHP з використанням його вбудованого менеджера FastCGI-запитів за допомогою наступного скрипта:
## ABSOLUTE path to the PHP binary
## tcp-port to bind on
## number of PHP children to spawn
## number of request before php-process will be restarted
# Allowed environment variables sperated by spaces
ALLOWED_ENV = "ORACLE_HOME PATH USER"
## if this script is run as root switch to the following user
################## no config below this line
if test x $ PHP_FCGI_CHILDREN = x; then
if test x $ UID = x0; then
EX = "/ bin / su -m -c" $ PHPFCGI -q -b $ FCGIADDR: $ FCGIPORT "$ USERID"
EX = "$ PHPFCGI -b $ FCGIADDR: $ FCGIPORT"
for i in $ ALLOWED_ENV; do
# Clean environment and set up a new one
nohup env - $ E sh -c "$ EX" > / Dev / null
Якщо ж Ви вирішили спробувати використовувати будь-яке стороннє програмне забезпечення для запуску PHP як FastCGI-сереру, можу порадити Вам поглянути на утиліту spawn-fcgi з пакета lighttpd.
Отже, Ваше сервер PHP запущений в режимі FastCGI і останнє, що Вам залишилося зробити, це змінити конфігурацію Вашого сервера nginx таким чином, щоб він переправляв всі запити до файлів php на певний tcp-порт, на якому слухає PHP. Для цього може бути використаний такий приклад секції location з конфігураційного файлу nginx (повна версія прикладу нвходітся тут):
# Pass the PHP scripts to FastCGI server listening on 127.0.0.1:8888
fastcgi_param SCRIPT_FILENAME / usr / local / nginx / html $ fastcgi_script_name;
fastcgi_param QUERY_STRING $ query_string;
fastcgi_param REQUEST_METHOD $ request_method;
fastcgi_param CONTENT_TYPE $ content_type;
fastcgi_param CONTENT_LENGTH $ content_length;
От і все! Тепер Ви можете використовувати Ваш сервер nginx для обслуговування будь-яких сайтів, написаних на PHP з продуктивністю, близькою до тієї, з якою працює модель mod_php в Apache, але при цьому у вас буде більше вільного місця, що дозволить Вам обробляти більше запитів від посетітесей Ваших сайтів .
Примітка: Скрипт запуску Fast CGI (який представлений в цій статті) - не повний, у нього відсутня нижня частина! Хоча ні, начебто працює.