Установим собственно php, в подходящей нам комплектации:
aptitude install php5 php5-cgi php5-mysql php5-curl php5-gd php5-json php5-mcrypt
Теперь нам нужно исправить конфигурационный файл php до нужного нам состояния. Откроем файл /etc/php5/cgi/php.ini в любимом текстовом редакторе. Поиском находим строку, содержащую cgi.fix_pathinfo. Нам нужно привести её к виду:
cgi.fix_pathinfo = 1
Если перед ней есть символ ; – уберите его, расскоментировав тем самым эту строку. Если там 0 – замените на 1.
Теперь нам нужно установить lighttpd или spawn-fcgi. В комплекте с lighttpd идёт утилита spawn-fcgi. В более старых дистрибутивах (etch, убунты 8.х и, возможно, lenny) нет отдельного пакета spawn-fcgi.
Для начала проверим, есть ли пакет spawn-fcgi:[у меня не было]
PHP:
root@debian-nginx-fastcgi:~$ aptitude search spawn-fcgi
Если вы увидите строку:
p spawn-fcgi – A fastcgi process spawner
то спаунер у нас есть и мы его установим:
PHP:
root@debian-nginx-fastcgi:~$ aptitude install spawn-fcgi
и переходим к части статьи «установка nginx»
Если спаунера у нас нет, то ставим lighttpd:
PHP:
root@debian-nginx-fastcgi:~$ aptitude install lighttpd
После чего отключаем его и «убираем из автозагрузки»:
PHP:
root@debian-nginx-fastcgi:~$ /etc/init.d/lighttpd stop && update-rc.d -f lighttpd remove
Установим nginx:
PHP:
root@debian-nginx-fastcgi:~$ aptitude install nginx
Создадим каталог для сайта:
PHP:
root@debian-nginx-fastcgi:~$ mkdir /var/www/example.ru
Как вы уже догадались, имя сайта у нас будет example.ru. Для редактирования файлов сайта мы будем использовать пользователя web (например, вообще же – используйте кого хотите).
Для запуска же скриптов мы будем использовать пользователя www-data. Он появится у нас после установки nginx. Напоминаю, что fastcgi – это вполне себе обычный CGI. Так что запускать мы скрипты можем от любого пользователя. Над безопасностью будем думать в следующих статьях.
Выдадим соответствующие права на каталог:
PHP:
root@debian-nginx-fastcgi:~$ chown -R web:www-data /var/www/example.ru && chmod -R 750 /var/www/example.ru
В дальнейшем, для каталогов, в которые скрипты могут записывать файлики – нам необходимо указывать chmod 770 для каталогов и 660 для файлов.
Запустим наш процесс fastcgi:
HTML:
root@debian-nginx-fastcgi:~$ /usr/bin/spawn-fcgi -a 127.0.0.1 -p 8080 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php1.pid
Мы должны увидеть надпись вроде «Child spawned with PID xxxx». Если надпись какая то другая – обязательно сообщите мне. Я составляю список проблем для статьи «анализ ошибок». Почта – vlad@debian.pro.
Немного об опциях:
-a 127.0.0.1 – указываем IP, на котором будет запущен php процесс. В дальнейшем этот адрес мы укажем в конфиге nginx. Можно запустить php на одном сервере, а nginx’ом дергать php скрипты с другого сервера…) Но это вы уже сами решайте.
-p 8080 – указываем порт, который будет служен php процесс. Опцию так же укажем в конфиге nginx. Для разных процессов следует использовать разные порты. Я ещё не говорил, что мы можем запускать неограниченное количество процессов spawn-fcgi )?
-u www-data -g www-data – пользователь и группа, от которых будут выполняться скрипты.
-f /usr/bin/php5-cgi – не меняйте эту опцию, если не уверены.
-P /var/run/fastcgi-php1.pid – PID файл процесса. Не пытайтесь использовать один PID файл разными процессами.
Переходим к настройке nginx.
Отсюда вы можете почерпнуть тайные знания о том, как настроить nginx (файл /etc/nginx/nginx.conf)
Вообще же нам сейчас нужно создать файл виртуального хоста для нашего сайта. Напомню, что у нас это – example.ru.
Создаём файл /etc/nginx/sites-enabled/example.ru и пишем в него примерно следующую билиберду:
PHP:
server {
listen 80;
server_name default.ru;
access_log /var/log/nginx-example.ru.log;
location / {
root /var/www/example.ru;
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:8080;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/example.ru$fastcgi_script_name;
include fastcgi_params;
}
# другие опции
}
Перезапускаем nginx:
PHP:
root@debian-nginx-fastcgi:~$ /etc/init.d/nginx restart
Затем ...ставим mysql так : 1. apt-get install mysql-server mysql-client
2. /etc/init.d/mysql restart 3. /etc/init.d/nginx restart
Ну и осталось проверить работоспособность связки и повыпендриваемся перед друзьями – создадим файл /var/www/example.ru/info.php и впишем в него код:
После чего по адресу http://example.ru/info.php мы должны увидеть типичную страничку с информацией о том, каким образом запущен наш php. Вы должны увидеть CGI/FastCGI в строке Server API.
Не забудьте файлик удалить потом.
Теперь в общем то вы можете разместить в каталоге /var/www/example.ru вы можете размещать файлы сайта. Работать должна любая CMS, не требущая mod_rewrite (использования файла .htaccess).
Спасибо debian.pro / редактировал Dream.
---------- Сообщение добавлено в 19:35 ---------- Предыдущее сообщение было в 19:27 ----------
[SPOILER="My Server Conf"]Kernel and CPU Linux 2.6.26-2-xen-686 on i686
Processor information Intel(R) Core(TM) i7 CPU 930 @ 2.80GHz, 2 cores
System uptime 1 hours, 11 minutes
Running processes 60
CPU load averages 0.21 (1 min) 0.10 (5 mins) 0.03 (15 mins)
CPU usage 0% user, 0% kernel, 0% IO, 100% idle
Real memory 1 GB total, 97.64 MB used
Virtual memory 2 GB total, 0 bytes used
Local disk space 59.06 GB total, 3.92 GB used[/SPOILER]
на apche было при том же состоянии системы... 1 GB total, 273.86 MB used