Установка серверов · 7 min read · Feb 03, 2026

Установка Nginx с PHP и MariaDB (в качестве замены MySQL) - LEMP - на Ubuntu 15.10 (Wiley Werewolf)

Nginx (произносится как “engine x”) - это бесплатный, открытый, высокопроизводительный HTTP-сервер. Nginx известен своей стабильностью, богатым набором функций, простой конфигурацией и низким потреблением ресурсов. В этом руководстве показано, как установить Nginx на сервер Ubuntu 15.10 с поддержкой PHP (через PHP-FPM) и MariaDB (в качестве замены MySQL). Термин LEMP расшифровывается как: Linux + Nginx + MySQL + PHP.

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

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

2 Установка MariaDB

Я установлю MariaDB вместо MySQL, MariaDB - это форк MySQL, поддерживаемый оригинальным основателем MySQL Монти Уидениусом, который имеет некоторые улучшения скорости и функциональности по сравнению с MySQL. Чтобы установить MariaDB, выполните:

sudo apt-get -y install mariadb-server mariadb-client

В данный момент у MariaDB нет установленного пароля для пользователя root. Запустите команду mysql_secure_installation, чтобы настроить пароль и удалить тестовую базу данных.

sudo mysql_secure_installation

Вам будут заданы следующие вопросы:

Введите текущий пароль для root (нажмите Enter, если нет): <-- нажмите Enter  
Установить пароль root? [Y/n] <-- y  
Новый пароль: <-- Введите новый пароль root для MariaDB  
Повторите новый пароль: <-- Повторите пароль  
Удалить анонимных пользователей? [Y/n] <-- y  
Запретить удаленный вход root? [Y/n] <-- y  
Перезагрузить таблицы привилегий сейчас? [Y/n] <-- y

3 Установка Nginx

Nginx доступен как пакет для Ubuntu 15.10. Возможно, что веб-сервер apache установлен на вашем сервере, и это может вызвать конфликт. Проверьте, что apache не работает:

ps aux | grep apache2

Если эта команда не возвращает никаких результатов, продолжайте с установкой Nginx.

Удалите apache в случае, если вышеуказанная команда показывает какие-либо процессы apache с помощью следующих команд:

sudo systemctl stop apache2.service  
sudo systemctl disable apache2.service  
sudo apt-get remove apache2

Теперь мы можем установить nginx.

sudo apt-get install nginx

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

sudo systemctl start nginx.service  
sudo systemctl enable nginx.service

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

Страница по умолчанию Ubuntu Nginx.

Почему на этой странице отображается “Apache2” вместо Nginx? Текст страницы не отражает фактически работающий веб-сервер, вышеуказанная страница - это просто страница по умолчанию на Ubuntu в корне документа /var/www/html/, которая используется как Apache, так и Nginx. Чтобы убедиться, что Nginx действительно обслуживает эту страницу, вы можете либо посмотреть HTTP-заголовки в консоли анализа сети Firefox:

Проверка http-заголовков Nginx.

Или вы можете проверить в оболочке, что nginx работает:

ps aux | grep nginx

Результат должен показать процессы nginx следующим образом:

Проверка процессов Nginx.

4 Установка PHP5

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

sudo apt-get install php5-fpm

PHP-FPM - это демон-процесс (с init-скриптом php5-fpm), который запускает сервер FastCGI на сокете /var/run/php5-fpm.sock.

5 Конфигурация Nginx

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

sudo nano /etc/nginx/nginx.conf

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

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

[...]
    keepalive_timeout   2;
[...]

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

sudo nano /etc/nginx/sites-available/default
##  
# Вам следует ознакомиться со следующими URL-адресами, чтобы получить четкое представление  
# о конфигурационных файлах Nginx, чтобы полностью раскрыть мощь Nginx.  
# http://wiki.nginx.org/Pitfalls  
# http://wiki.nginx.org/QuickStart  
# http://wiki.nginx.org/Configuration  
#  
# В общем, вы захотите переместить этот файл куда-нибудь и начать с чистого  
# файла, но держите его под рукой для справки. Или просто отключите в sites-enabled.  
#  
# Пожалуйста, смотрите /usr/share/doc/nginx-doc/examples/ для более детальных примеров.  
##  
  
# Конфигурация сервера по умолчанию  
#  
server {  
 listen 80 default_server;  
 listen [::]:80 default_server;  
  
 # Конфигурация SSL  
 #  
 # listen 443 ssl default_server;  
 # listen [::]:443 ssl default_server;  
 #  
 # Примечание: вы должны отключить gzip для SSL-трафика.  
 # См.: https://bugs.debian.org/773332  
 #  
 # Ознакомьтесь с ssl_ciphers, чтобы обеспечить безопасную конфигурацию.  
 # См.: https://bugs.debian.org/765782  
 #  
 # Самоподписанные сертификаты, сгенерированные пакетом ssl-cert  
 # Не используйте их на производственном сервере!  
 #  
 # include snippets/snakeoil.conf;  
  
 root /var/www/html;  
  
 # Добавьте index.php в список, если вы используете PHP  
 index index.php index.html index.htm index.nginx-debian.html;  
  
 server_name _;  
  
 location / {  
 # Сначала попытайтесь обслужить запрос как файл, затем  
 # как каталог, затем вернитесь к отображению 404.  
 try_files $uri $uri/ =404;  
 }  
  
 # передать PHP-скрипты серверу FastCGI, слушающему на 127.0.0.1:9000  
 #  
 location ~ \.php$ {  
  include snippets/fastcgi-php.conf;  
   
  # С php5-cgi отдельно:  
  # fastcgi_pass 127.0.0.1:9000;  
  # С php5-fpm:  
  fastcgi_pass unix:/var/run/php5-fpm.sock;  
 }  
  
 # запретить доступ к файлам .htaccess, если корень документа Apache  
 # совпадает с корнем nginx  
 #  
 #location ~ /\.ht {  
 # deny all;  
 #}  
}  
  
  
# Конфигурация виртуального хоста для example.com  
#  
# Вы можете переместить это в другой файл в sites-available/ и создать символическую ссылку  
# на sites-enabled/, чтобы включить его.  
#  
#server {  
# listen 80;  
# listen [::]:80;  
#  
# server_name example.com;  
#  
# root /var/www/example.com;  
# index index.html;  
#  
# location / {  
# try_files $uri $uri/ =404;  
# }  
#}

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

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

Важная часть для PHP - это блок location ~ .php$ {}. Раскомментируйте его, чтобы включить. Пожалуйста, обратите внимание, что важно включить строку “include snippets/fastcgi-php.conf;” внутри блока PHP location, чтобы предотвратить нулевые уязвимости (см. http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP и http://forum.nginx.org/read.php?2,88845,page=3).

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

sudo service nginx reload

Затем откройте /etc/php5/fpm/php.ini…

sudo nano /etc/php5/fpm/php.ini

… и установите cgi.fix_pathinfo=0:

[...]
; cgi.fix_pathinfo предоставляет *реальную* поддержку PATH_INFO/PATH_TRANSLATED для CGI. PHP  
; предыдущее поведение заключалось в том, чтобы устанавливать PATH_TRANSLATED в SCRIPT_FILENAME и не понимать,  
; что такое PATH_INFO. Для получения дополнительной информации о PATH_INFO смотрите спецификации cgi. Установка  
; этого в 1 приведет к тому, что PHP CGI исправит свои пути в соответствии со спецификацией. Установка  
; нуля заставляет PHP вести себя как раньше. Значение по умолчанию - 1. Вы должны исправить свои скрипты  
; чтобы использовать SCRIPT_FILENAME вместо PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

Перезагрузите PHP-FPM:

sudo service php5-fpm reload

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

sudo nano /var/www/html/info.php

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

Информация о PHP-FPM.

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

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

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

apt-cache search php5

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

sudo apt-get install php5-mysqlnd 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-sqlite php5-tidy php5-xmlrpc php5-xsl

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

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

sudo apt-get install php5-apcu

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

sudo service php5-fpm reload

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

Информация о PHP-FPM - часть 2

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

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

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

… и измените строку listen следующим образом:

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

Это заставит PHP-FPM слушать на порту 9000 на IP 127.0.0.1 (localhost). Убедитесь, что вы используете порт, который не занят на вашей системе.

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

sudo php5-fpm reload

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

sudo nano /etc/nginx/sites-available/default
[...]
   
 location ~ \.php$ {  
   include snippets/fastcgi-php.conf;  
  
   # С php5-cgi отдельно:  
   fastcgi_pass 127.0.0.1:9000;  
   # С php5-fpm:  
   # fastcgi_pass unix:/var/run/php5-fpm.sock;  
 }  

[...]

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

sudo service nginx reload

8 Скачивание образа виртуальной машины этого руководства

Это руководство доступно в виде готового образа виртуальной машины в формате ovf/ova, совместимого с VMWare и Virtualbox. Образ виртуальной машины использует следующие данные для входа:

SSH / Вход в оболочку

Имя пользователя: administrator
Пароль: howtoforge

Этот пользователь имеет права sudo.

Вход в MariaDB

Имя пользователя: root
Пароль: howtoforge

IP виртуальной машины - 192.168.1.100, его можно изменить в файле /etc/network/interfaces. Пожалуйста, измените все вышеперечисленные пароли для обеспечения безопасности виртуальной машины.

9 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.