Установка Nginx с PHP5 и поддержкой MySQL в Ubuntu 9.04

Источник: http://linux-bsd.in.ua/

Nginx(engine x) (читается как Энджин икс) является свободным, открытым исходным кодом, высокопроизводительный сервер HTTP. Nginx известен своей стабильностью, богатым набором функций, простой конфигурацией, и низким потреблением ресурсов. В этом учебнике показано, как можно установить Nginx на Ubuntu 9.04 сервер с поддержкой PHP5 (через FastCGI) и поддержкой MySQL.



1 Предварительная заметка 

В этом уроке я использую имя хоста server1.example.com с IP адресом 192.168.0.100. Эти параметры могут отличаться от ваших, поэтому вам придется заменить их в случае необходимости.

Я запускаю все шаги в этом учебнике с привилегиями администратора, поэтому убедитесь, что вы вошли в систему как Root:

sudo su



2 Установка MySQL 5.0

Для установки MySQL, запускаем

aptitude install mysql-server mysql-client



Вам будет предложено ввести пароль для пользователя root MySQL - этот пароль действителен для пользователя root@localhost, а также root@server1.example.com, поэтому нам не нужно указывать пароль root MySQL, который мы введём вручную позже:

New password for the MySQL "root" user: <-- yourrootsqlpassword
Repeat password for the MySQL "root" user: <-- yourrootsqlpassword



3 Установка Nginx

Nginx доступна в виде пакета для Ubuntu 9.04, который мы можем установить следующим образом:

aptitude install nginx



Затем стартуем Nginx:

/etc/init.d/nginx start



Введите IP вашего веб-сервера адрес или имя хоста в браузере (например, http://192.168.0.100), и вы увидите страницу приветствия Nginx:


4 Установка PHP5 

Мы можем заставить работать PHP5 в Nginx через FastCGI. К счастью, Ubuntu 9.04 предоставляется FastCGI поддержкой PHP5 пакетов, которые мы устанавливаем (вместе с некоторыми необходимыми модулями PHP5 как php5-MySQL, если вы хотите использовать MySQL из ваших скриптов PHP):

aptitude install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl



Затем открываем /etc/php5/cgi/php.ini и добовляем линию cgi.fix_pathinfo = 1 в самый конец файла:

vi /etc/php5/cgi/php.ini



[...]
cgi.fix_pathinfo = 1



Это нет автономный демон FastCGI пакета для Ubuntu 9.04, поэтому мы используем spawn-fcgiпрограмму Lighttpd. Мы установим Lighttpd следующим образом:

aptitude install lighttpd



Вы увидите сообщение, что Lighttpd не может запуститься, поскольку порт 80 уже используется:

Starting web server: lighttpd 2009-04-30 15:51:50: (network.c.300) can't bind to port: 80 Address already in use
failed!



Как и предполагалось, потому, что Nginx уже слушает 80 порт. Запускаем:

update-rc.d -f lighttpd remove



так что Lighttpd не будет запускаться при запуске. 

Мы установили Lighttpd, поскольку нам нужна только одна программа, которая поставляется вместе с пакетом, /usr/bin/spawn-fcgi, который сможем использовать для запуска процессов FastCGI. Взгляните на

spawn-fcgi --help



, чтобы узнать о ней больше. 

Для запуска демона PHP FastCGI слушающий порт 9000 на localhost и запущен в качестве пользователя и группы www-data, мы запустим следующую
команду:

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid



Конечно, вы не хотите, вводить эту команду вручную, во время загрузки системы, для того, чтобы система выполнила команду автоматически в момент загрузки, откройте файл /etc/rc.local...

vi /etc/rc.local



... и добавте команду в конец файла (перед линией exit):

[...]
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
[...]



5 Настройка Nginx

Конфигурируем nginx в файле /etc/nginx/nginx.conf который мы сейчас откроем:

vi /etc/nginx/nginx.conf



Для начала (это необязательно) увеличиваем число рабочих процессов и устанавливаемkeepalive_timeout до разумного значения:

[...]
worker_processes 5;
[...]
keepalive_timeout 2;
[...]



Виртуальные хосты определяются по server {} контейнерах. Vhost умолчанию (default) определяется в файле /etc/nginx/sites-available/default - давайте изменим его следующим образом:

vi /etc/nginx/sites-available/default



[...]
server {
listen 80;
server_name _;

access_log /var/log/nginx/localhost.access.log;

location / {
root /var/www/nginx-default;
index index.php index.html index.htm;
}

location /doc {
root /usr/share;
autoindex on;
allow 127.0.0.1;
deny all;
}

location /images {
root /usr/share;
autoindex on;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include fastcgi_params;
}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
[...]



server_name _; делает это по умолчанию всеохватывающий vhost (конечно, Вы можете также указать имя хоста, например, www.example.com).

В location / я добавил index.php в строку indexroot /var/www/nginx-default; означает, что коневой документ это каталог /var/www/nginx-default.

Важной частью для РНР это location ~ \.php$ {} stanza. Раскомментируйте его, чтобы включить. Пожалуйста, убедитесь, что вы изменили линию fastcgi_param на fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; (замените /var/www/nginx-default на ваш корневой каталог) поскольку в противном случае интерпретатор PHP не найдёт PHP скрипт, на который будет обращатся ваш браузер.

Убедитесь в том, что существуют некоторые пробелы между include и fastcgi_params; - в файле по умолчанию это записано как одно слово, которое является ошибкой.

Теперь сохраните файл и перезагрузите Nginx:

/etc/init.d/nginx restart



Теперь создадим следующий PHP файл в корневом каталоге документов

vi /var/www/nginx-default/info.php



<?php
phpinfo();
?>



Теперь мы откроем этот файл в браузере (например, http://192.168.0.100/info.php):



Как видите, PHP5 работает, и что он работает через FastCGI, как показано на линии Server API. Если вы прокрутите список вниз, вы увидите все модули, которые уже включены в PHP5, включая MySQL модуль:

 

Добавить комментарий

Защитный код
Обновить