Установка Nginx с PHP5 (и PHP-FPM) и поддержкой MySQL в Ubuntu 11.10

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

UbuntuNginx является свободным и открытым исходным кодом, служащий для повышения производительности HTTP-сервера. Nginx известен своей стабильностью, богатым набором функций, простой конфигурации, и низкое потребление ресурсов. В этом материале показано, как можно установить Nginx на Ubuntu server 11.10 с поддержкой PHP5 (через PHP-FPM) и поддержкой MySQL.

Предварительные замечания

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

В данном уроке я работаю в операционной системе Ubuntu server 11.10, поэтому, мне необходимо выполнять все шаги в с привилегиями супер пользователя, для этого убедитесь, что Вы вошли в систему с правами root, а не остались пользователем которого Вы создавали при установке Ubunru server 11.10:

  • sudo su

Установка MySQL 5

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

  • apt-get install mysql-server mysql-client

Вам будет предложено ввести пароль для пользователя MySQL root - это пароль действителен для пользователей root@localhost , а также Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра., поэтому мы не обязаны указать пароль root MySQL в дальнейших шагах:

Новый пароль для MySQL "root" пользователя: - Ваш пароль пользователя SQL root
Повторите пароль для MySQL "root" пользователя: - Ваш пароль пользователя SQL root

Установка Nginx

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

  • apt-get install nginx

В последствии чего запустим только что установленный Nginx:

  • /etc/init.d/nginx start

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

web-Nginx_02

Установка PHP5

Мы можем запустить PHP5 в Nginx через PHP-FPM (PHP-FPM (FastCGI Process Manager)) является альтернативой PHP FastCGI реализации с некоторыми дополнительными функциями, полезна для сайтов любого размера, особенно загруженных сайтов). Мы установим его следующим образом:

  • apt-get install php5-fpm

PHP-FPM является демоном (с сценарием инициализации /etc/init.d/php5-fpm), который запускает FastCGI на сервере через порт 9000.

Настройка Nginx

Nginx конфигурация находится в /etc/nginx/nginx.conf, который мы откроем сейчас:

  • nano /etc/nginx/nginx.conf

Первая строка (это не обязательно) увеличение количества рабочих процессов и следующая время их жизни keepalive_timeout в разумных пределах:

[...]
worker_processes  4;
[...]
    keepalive_timeout   2;
[...]

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

  • nano /etc/nginx/sites-available/default
[...]
server {
        listen   80; ## listen for ipv4; this line is default and implied
        listen   [::]:80 default ipv6only=on; ## listen for ipv6

        root /usr/share/nginx/www;
        index index.php index.html index.htm;

        # Make site accessible from http://localhost/
        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri $uri/ /index.html;
        }

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

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

        #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 /usr/share/nginx/www;
        }

        # 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;
                include fastcgi_params;
        }

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

Раскомментируйте строку listen, чтобы сделать Nginx доступным на 80 порту протокола IPv4 и IPv6.

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

Я добавил index.php в строке index. root /usr/share/nginx/www, означает, что корень документов находиться в каталоге /usr/share/nginx/www.

Важную роль для PHP выполняют строки location ~ \.php$ {} stanza. Раскомментируйте их, чтобы включить их.

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

  • /etc/init.d/nginx restart

Теперь создадим файл PHP в root каталоге /usr/share/nginx/www:

  • nano /usr/share/nginx/www/info.php
<?php
phpinfo();
?>

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

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


Получение поддержки MySQL в PHP5

Чтобы получить поддержку MySQL в PHP, мы установим пакет php5-MySQL. Для поиска доступных PHP5 модулей которые нам могут понадобятся для работы Web приложений найдем следующим образом:

  • apt-cache search php5

Выберите из них нужное Вам, и установить их так:

  • apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Теперь перезапустите PHP-FPM:

  • /etc/init.d/php5-fpm restart

Теперь обновите страницу http://192.168.0.100/info.php в вашем браузере и прокрутите снова вниз до раздела модулей. В этот раз Вы должны найти много новых модулях, в том числе модуль MySQL.

Создание основного сокета PHP-FPM

По умолчанию PHP-FPM прослушивает порт 9000 на 127.0.0.1. Это также можно сделать используя PHP-FPM сокет Unix, который позволяет избежать накладных расходов TCP. Чтобы сделать это, откройте /etc/php5/fpm/pool.d/www.conf ...

  • nano /etc/php5/fpm/pool.d/www.conf

... и сделайте, что бы строка listen выглядила следующим образом:

[...]
;listen = 127.0.0.1:9000
listen = /tmp/php5-fpm.sock
[...]

Затем перезагрузите PHP-FPM:

  • /etc/init.d/php5-fpm restart

Следующий шаг конфигурации Nginx, и все ваши виртуальных доменов и изменения строк fastcgi_pass 127.0.0.1:9000; на fastcgi_pass unix:/tmp/php5-fpm.sock; , например, так:

  • nano /etc/nginx/sites-available/default
[...]
        location ~ \.php$ {
                fastcgi_pass unix:/tmp/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
[...]

Наконец перезагрузим Nginx:

  • /etc/init.d/nginx reload

CGI/Perl скрипты

Если вы хотите работать с CGI/Perl скриптами в Nginx, пожалуйста, прочтите это руководство: Обслуживание CGI скриптов с Nginx В Debian Squeeze / Ubuntu 11.04. Рекомендуемый способ заключается в использовании fcgiwrap (глава 4).