|
|||||||
Nginx + PHP-FastCGI или избавляемся от apache
Время создания: 02.12.2009 13:12
Текстовые метки: nginx, php, php5
Раздел: Компьютер - Linux - Сеть в Linux - nginx
Запись: xintrea/mytetra_syncro/master/base/0000001328/text.html на raw.github.com
|
|||||||
|
|||||||
Статья от 1 Августа 2009. В предыдущем шаге мы уже убрали apache слушать только локальные запросы (те которые приходят от nginx) теперь же пришло время убрать его совсем и заставить nginx обрабатывать все самому! Для этого понадобится php5-cgi, если он еще не установлен, необходимо поставить: sudo apt-get install php5-cgi Для запуска php потребуется утилита spawn-fcgi от lighttpd. Сейчас она идёт как отдельный проект и расположена по адресу http://redmine.lighttpd.net/projects/spawn-fcgi. Можно получить последнюю версию оттуда, а можно воспользоваться советом отсюда и взять её из lighttpd: mkdir ~/sources cd ~/sources # возможно будет уже и более свежая версия wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.bz2 tar jxvf lighttpd-1.4.19.tar.bz2 # необходимые пакеты для установочного скрипта sudo apt-get install libpcre3-dev libbz2-dev cd lighttpd-1.4.19 # здесь может возникнуть ошибка, но и тут же предлагается решение - # конфигурировать с параметром --without-zlib ./configure --without-zlib make sudo cp src/spawn-fcgi /usr/bin/spawn-fcgi # И удалим за собой ненужныеболее файлы cd ~/ rm -Rf sources/ Таким образом, или взяв отдельный пакет, но spawn-fcgi у нас получился установлен. Теперь необходимо все это дело запускать. Сделаем скрипт, который будет устанавливать дополнительные управляющие переменные и запускать php5-cgi: sudo vim /usr/bin/php-fastcgi и вставляем: #!/bin/sh # сколько процессов запускать PHP_FCGI_CHILDREN=3 # через сколько обработанных запросов перезапускать экземпляр PHP_FCGI_MAX_REQUESTS=1000 exec /usr/bin/php5-cgi Скрипт для запуска php5-cgi готов, теперь нам нужен скрипт, для запуска spawn-fcgi, который будет дергать уже наш скрипт для установки переменных и запуска php5-cgi: sudo vim /etc/init.d/init-fastcgi и вставляем в него: #!/bin/bash PHP_SCRIPT="/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php-fastcgi" 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 /etc/init.d/init-fastcgi {start|stop|restart}" exit 1 ;; esac exit $RETVAL Осталось только сделать оба новых скрипта доступных для запуска: sudo chmod 755 /usr/bin/php-fastcgi sudo chmod 755 /etc/init.d/init-fastcgi Теперь можно попробовать запустить наш FastCGI: sudo /etc/init.d/init-fastcgi start В ответ должно получится примерно следующее: spawn-fcgi.c.197: child spawned successfully: PID: 16428 Осталось только добавит наш скрипт в автозагрузку: sudo update-rc.d init-fastcgi defaults Теперь надо подправить все конфиги, что бы nginx обрабатывал PHP сам, а не передавал их на apache. У меня в конфиге sudo vim /etc/nginx/sites-available/svdev.ru получилось примерно следующее: server { listen 80; server_name www.svdev.ru; # здесь при заходе на www.svdev.ru происходит редирект на svdev.ru rewrite ^(.*) http://svdev.ru$1 permanent; } server { listen 80; server_name svdev.ru; error_log /var/www/svdev.ru/logs/error.log warn; access_log /dev/null; root /var/www/svdev.ru/htdocs; charset utf-8; # страницы с ошибками, вместо стандартных, путь указывается от root (выше) error_page 404 /error/404.html; error_page 403 /error/403.html; error_page 500 /error/500.html; location ~ .*(gif|jpg|jpeg|png|ico|css|swf|js|html|htm)$ { } # Для wordpess - это директория с upload и по умолчанию получится # что залив php скрипт можно будет выполнить его по прямой ссылке location ~ wp-content/uploads/.*\.php { } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME /var/www/svdev.ru/htdocs$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_pass 127.0.0.1:9000; # Директива определяет что ответы FastCGI-сервера с кодом больше или равные 400 # перенаправлять на обработку nginx'у с помощью директивы error_page fastcgi_intercept_errors on; break; } location / { fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /var/www/svdev.ru/htdocs$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; include /etc/nginx/fastcgi_params; fastcgi_intercept_errors on; } } и на этом можно пока остановиться. Теперь apache можно окончательно удалить с сервера. sudo apt-get remove apache2 Все. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|