Установка сервера · 5 min read · Dec 27, 2025

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

Nginx (произносится как “engine x”) — это бесплатный, открытый, высокопроизводительный HTTP-сервер. Nginx известен своей стабильностью, богатым набором функций, простой конфигурацией и низким потреблением ресурсов. Этот учебник показывает, как установить Nginx на сервер Ubuntu 12.04 LTS с поддержкой PHP5 (через PHP-FPM) и поддержкой MySQL (LEMP = L inux + nginx (произносится как “ e ngine x”) + M ySQL + P HP).

Я не даю никаких гарантий, что это сработает для вас!

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

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

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

sudo su

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

Чтобы установить MySQL, мы выполняем

 apt-get install mysql-server mysql-client 

Вам будет предложено ввести пароль для пользователя root MySQL — этот пароль действителен для пользователя root@localhost, а также [email protected], поэтому нам не нужно указывать пароль root MySQL вручную позже:

Новый пароль для пользователя MySQL “root”: <– вашпарольsqlroot
Повторите пароль для пользователя MySQL “root”: <– вашпарольsqlroot

3 Установка Nginx

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

 apt-get install nginx

Запустите nginx после этого:

 /etc/init.d/nginx start

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

Корневая директория по умолчанию для nginx на Ubuntu 12.04 — /usr/share/nginx/www.

4 Установка 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.

5 Настройка nginx

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

 vi /etc/nginx/nginx.conf

Конфигурация проста для понимания (вы можете узнать больше об этом здесь: http://wiki.nginx.org/NginxFullExample и здесь: http://wiki.nginx.org/NginxFullExample2)

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

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

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

 vi /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; # Сделать сайт доступным по адресу http://localhost/ server_name _; location / { # Сначала попытка обслужить запрос как файл, затем # как директорию, затем вернуться к index.html try_files $uri $uri/ /index.html; # Раскомментируйте, чтобы включить naxsi в этом местоположении # include /etc/nginx/naxsi.rules } location /doc/ { alias /usr/share/doc/; autoindex on; allow 127.0.0.1; deny all; } # Только для nginx-naxsi: обработка отклоненных запросов #location /RequestDenied { # Например, вернуть код ошибки #return 418; #} #error_page 404 /404.html; # перенаправить страницы ошибок сервера на статическую страницу /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/www; } # передать PHP-скрипты серверу FastCGI, слушающему на 127.0.0.1:9000 # location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } # запретить доступ к файлам .htaccess, если корневая директория Apache # совпадает с корневой директорией nginx # location ~ /\.ht { deny all; } } [...] |

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

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

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

Важная часть для PHP — это блок location ~ .php$ {}. Раскомментируйте его, чтобы включить его. Обратите внимание, что я добавил строку try_files $uri =404; для предотвращения нулевых уязвимостей (см. http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP и http://forum.nginx.org/read.php?2,88845,page=3). В качестве альтернативы, если вы не хотите использовать строку try_files $uri =404;, вы можете установить cgi.fix_pathinfo = 0; в /etc/php5/fpm/php.ini (не забудьте перезагрузить PHP-FPM после этого).

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

/etc/init.d/nginx reload

Теперь создайте следующий PHP-файл в корневой директории /usr/share/nginx/www:

vi /usr/share/nginx/www/info.php

| |

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

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

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

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

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

Xcache — это бесплатный и открытый кэш PHP opcode для кэширования и оптимизации промежуточного кода PHP. Он похож на другие кэши PHP opcode, такие как eAccelerator и APC. Настоятельно рекомендуется установить один из них, чтобы ускорить вашу страницу PHP.

Xcache можно установить следующим образом:

apt-get install php5-xcache

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

/etc/init.d/php5-fpm reload

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

7 Настройка PHP-FPM для использования Unix-сокета

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

vi /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 reload

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

vi /etc/nginx/sites-available/default

| [...] location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } [...] |

Наконец, перезагрузите nginx:

/etc/init.d/nginx reload

8 CGI/Perl скрипты

Если вы хотите обслуживать CGI/Perl скрипты с помощью nginx, пожалуйста, прочитайте этот учебник: Обслуживание CGI-скриптов с помощью Nginx на Debian Squeeze/Ubuntu 11.04

Рекомендуемый способ — использовать fcgiwrap (глава 4).

9 Ссылки

Об авторе

Фалко Тимме является владельцем Timme Hosting (ультрабыстрая веб-хостинг на nginx). Он является ведущим куратором HowtoForge (с 2005 года) и одним из основных разработчиков ISPConfig (с 2000 года). Он также внес вклад в книгу O’Reilly “Администрирование систем Linux”.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.