nginx+php(FastCGI) под ubuntu


Казалось бы – что может быть тривиальнее – поставить 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-php
chmod +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. #1 by Salnikov - Июль 6th, 2009 at 11:38

    Придуманная мной технология серьезно отличается от предложенной автором, если кому-то интересно, могу поделиться полученными результатами. Мой емаил:vboger@newspirit.com, Михаил.

  2. #2 by Igor - Июль 22nd, 2009 at 12:58

    /etc/init.d/spawn-php
    spawn-fcgi.c.230: child exited with: 2
    что исправить?) спасибо.

  3. #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. #4 by dcsk - Июль 22nd, 2009 at 13:19

    Статика правильно отдается? Путь к пхп файлам правильно прописан?

  5. #5 by Igor - Июль 22nd, 2009 at 13:35

    а у меня вроде как nginx собран без возможности просмотра статистики) все остальное прописал как в статье, только путь к интерпритатору свой указал.. как я понимаю после запуска /etc/init.d/spawn-php должен открыться порт 9999 или нет? вот у меня не открывается, значит неправильно установил spawn-fcgi?

  6. #6 by dcsk - Июль 22nd, 2009 at 13:50

    Такая ошибка бывает при неправильно прописаном пути к пхп файлам, либо не работающем цги сервере.

  7. #7 by Igor - Июль 22nd, 2009 at 14:00

    ага) спасибо большое) натупил с путем к cgi серверу, все работает)

(will not be published)
  1. No trackbacks yet.