Казалось бы – что может быть тривиальнее – поставить nginx с поддержкой php. Но оказывается что все не так просто: большая часть информации уже устарела или просто не работает, потому я решил обьеденить всю собранную информацию. (Использовался Ubuntu 8.04.2 LTS Hardy Heron)
1)Ставим инструментарий для сборки:
apt-get install php5-cli build-essential
Нюанс: я не знаю какой логикой руководствовались мейнтейнеры убунту, но факт в том что пакет php5 зависит от libapache2-mod-php5, который в свою очередь тянет за собой весь апач, потому нам нужен именно php5-cgi.
2)Устанавливаем spawn-fcgi из состава lighttpd
wget http://www.lighttpd.net/download/lighttpd-1.4.21.tar.gz
tar -xvvf lighttpd-1.4.21.tar.gz
./configure && make
Далее из-под рута копируем куда надо бинарники spawn-fcgi:
cp src/spawn-fcgi /usr/local/bin/spawn-fcgi
cp doc/spawn-php.sh /etc/init.d/spawn-phpchmod +x /etc/init.d/spawn-php
Да, есть более удобный метод, описаный тут. (Запуск встроенного в PHP сервера FastCGI – метод, не требующий никаких дополнительных утилит.) Но у меня он банально не заработал:
2009/02/27 23:24:27 [error] 14755#0: *19 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 192.168.0.102, server: home-test, URL: “/var/www/files/index.php”, upstream: “fastcgi://127.0.0.1:8888″, host: “home-test”
3) Исправляем настройки spawn-php:
Обязательно:
SPAWNFCGI=”/usr/local/bin/spawn-fcgi”
FCGIPROGRAM=”/usr/lib/cgi-bin/php5″
Желательно:
USERID=www-data
GROUPID=www-data
FCGIPORT=”9999″
Остальное.
4)Настраиваем nginx:
Для настройки nginx достаточно убрать комментарии с строк в файле /etc/nginx/sites-enabled/default , и получить:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9999;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
includefastcgi_params я удалил, т.к. nginx не запускался с таким параметром.
5) За(пере)запускаем nginx и spawn-fcgi:
/etc/init.d/spawn-php
/etc/init.d/nginx restart
И получаем работающий php. Кто не знает, его работоспособность можно проверить простым кодом:
<?php
phpinfo();
?>
#1 by Salnikov - Июль 6th, 2009 at 11:38
Придуманная мной технология серьезно отличается от предложенной автором, если кому-то интересно, могу поделиться полученными результатами. Мой емаил:vboger@newspirit.com, Михаил.
#2 by Igor - Июль 22nd, 2009 at 12:58
/etc/init.d/spawn-php
spawn-fcgi.c.230: child exited with: 2
что исправить?) спасибо.
#3 by Igor - Июль 22nd, 2009 at 13:13
исправил, неверно был указан путь к интерпритатору пхп…
spawn-fcgi.c.207: child spawned successfully: PID: 30817
но вот только все равно страница с phpinfo() не отображается..
The page you are looking for is temporarily unavailable.
Please try again later.
что делaть?
#4 by dcsk - Июль 22nd, 2009 at 13:19
Статика правильно отдается? Путь к пхп файлам правильно прописан?
#5 by Igor - Июль 22nd, 2009 at 13:35
а у меня вроде как nginx собран без возможности просмотра статистики) все остальное прописал как в статье, только путь к интерпритатору свой указал.. как я понимаю после запуска /etc/init.d/spawn-php должен открыться порт 9999 или нет? вот у меня не открывается, значит неправильно установил spawn-fcgi?
#6 by dcsk - Июль 22nd, 2009 at 13:50
Такая ошибка бывает при неправильно прописаном пути к пхп файлам, либо не работающем цги сервере.
#7 by Igor - Июль 22nd, 2009 at 14:00
ага) спасибо большое) натупил с путем к cgi серверу, все работает)