Документ создан: 20.11.2012

Запуск nginx с поддержкой PHP-FastCGI

Подсмотренно здесь. Автору - спасибо!
Решил попробовать избавиться от Apache и перейти на nginx. В отличии от Apache, в nginx немного сложнее включить поддержку PHP. Дабы не забыть, пишу эту статью. Опробовано на Debian GNU/Linux 6.0.4 (squeeze).

Настройка

  1. Устанавливаем необходимые модули:
    sudo apt-get install php5-cgi nginx spawn-fcgi
  2. Создаём инициализационный скрипт:
    sudo vim /etc/init.d/php-fastcgi

    следующего содержания:

    php-fastcgi
    #!/bin/bash
     
    ### BEGIN INIT INFO
    # Provides:	     php-fastcgi
    # Required-Start:    $local_fs $network $syslog
    # Required-Stop:     $local_fs $network $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    ### END INIT INFO
     
    # число рабочих запущенных процессов 
    PHP_FCGI_CHILDREN=3
    # число запросов которые один рабочий процесс обработает до завершения
    PHP_FCGI_MAX_REQUESTS=1000
     
    PHP_SCRIPT="/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi"
    RETVAL=0
    case "$1" in
    	start)
    		$PHP_SCRIPT
    		RETVAL=$?
    		;;
    	stop)
    		killall -9 php5-cgi
    		RETVAL=$?
    		;;
    	restart)
    		killall -9 php5-cgi
    		$PHP_SCRIPT
    		RETVAL=$?
    		;;
    	*)
    		echo "Usage: sudo $0 {start|stop|restart}"
    		exit 1
    		;;
    esac
    exit $RETVAL
  3. Назначаем атрибут исполняемого файла:
    sudo chmod +x /etc/init.d/php-fastcgi
  4. Запускаем:
    sudo /etc/init.d/php-fastcgi start

    и видим вывод:

    spawn-fcgi: child spawned successfully: PID: 30476
  5. Можно ещё проверить доступность порта:
    sudo netstat -ntpl | grep 9000
    tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      30476/php5-cgi 

    Видим, что порт прослушивается и прослушивается только на локальном адресе.

  6. Прописываем скрипт в автозапуск:
    sudo update-rc.d php-fastcgi defaults
  7. Теперь пришла очередь править конфигурационные файлы nginx. У меня один

сайт для внутренних нужд, поэтому конфигурационный файл ("/etc/nginx/sites-available/default"):

sudo vim /etc/nginx/sites-available/default

выглядит так:

default
server {
 
	listen   80; ## listen for ipv4
#	listen   [::]:80 default ipv6only=on; ## listen for ipv6
 
	server_name  server.domain.ru;
 
	access_log  /var/log/nginx/localhost.access.log;
	root   /var/www;
 
	location / {
		index  index.php;
	}
 
	location ~ \.php$ {
		fastcgi_pass   127.0.0.1:9000;
		fastcgi_index  index.php;
		fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		include        fastcgi_params;
	}
 
}
  1. Запускаем nginx:
    sudo /etc/init.d/nginx start

    или, если он уже был запущен, перезагружаем:

    sudo nginx -s reload

Возможные проблемы

  • Если при обращении к php-странице вы получили "No input file specified.", проверьте правильность пути в "fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name;" в файле "/etc/nginx/sites-available/default". Путь должен быть до места расположения сайта (php-страницы).
 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate