Установка серверов · 7 min read · Oct 13, 2025
Установка Nginx с PHP 7 и MySQL 5.7 (LEMP) на Ubuntu 16.04 LTS
Nginx (произносится как “engine x”) — это бесплатный, открытый, высокопроизводительный HTTP-сервер. Nginx известен своей стабильностью, богатым набором функций, простой конфигурацией и низким потреблением ресурсов. Этот учебник показывает, как установить Nginx на сервер Ubuntu 16.04 с поддержкой PHP 7 (через PHP-FPM) и поддержкой MySQL 5.7 (LEMP = L inux + nginx (произносится как “ e ngine x”) + M ySQL + P HP).
1 Предварительная заметка
В этом учебнике я использую имя хоста server1.example.com с IP-адресом 192.168.1.100. Эти настройки могут отличаться у вас, поэтому вам нужно заменить их в соответствующих местах.
Я выполняю все шаги в этом учебнике с правами root, поэтому убедитесь, что вы вошли как root:
sudo -s2 Установка MySQL 5.7
Чтобы установить MySQL, мы выполняем:
apt-get -y install mysql-server mysql-clientВам будет предложено ввести пароль для пользователя root MySQL — этот пароль действителен для пользователя root@localhost, а также для [email protected], поэтому нам не нужно указывать пароль root MySQL вручную позже:
Новый пароль для пользователя MySQL “root”: <– вашпарольmysql Повторите пароль для пользователя MySQL “root”: <– вашпарольmysql

Чтобы защитить сервер базы данных и удалить анонимного пользователя и тестовую базу данных, выполните команду mysql_secure_installation.
mysql_secure_installationВам будут заданы следующие вопросы:
root@server1:~# mysql_secure_installationSecuring the MySQL server deployment.Enter password for user root: <-- Введите пароль root MySQLVALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?Press y|Y for Yes, any other key for No: <-- Нажмите y, если хотите эту функцию, или нажмите Enter в противном случае.
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Нажмите Enter... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.Remove anonymous users? (Press y|Y for Yes, any other key for No) : <-- y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.Disallow root login remotely? (Press y|Y for Yes, any other key for No) : <-- y
Success.By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : <-- y
- Dropping test database...
Success.- Removing privileges on test database...
Success.Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.Reload privilege tables now? (Press y|Y for Yes, any other key for No) : <-- y
Success.All done!MySQL теперь защищен.
3 Установка Nginx
Если вы уже установили Apache2, сначала удалите его с помощью этих команд, а затем установите nginx:
service apache2 stop
update-rc.d -f apache2 remove
apt-get remove apache2Nginx доступен как пакет для Ubuntu 16.04, который мы можем установить.
apt-get -y install nginxЗапустите nginx после этого:
service nginx startВведите IP-адрес или имя хоста вашего веб-сервера в браузере (например, http://192.168.1.100), и вы должны увидеть следующую страницу:

Корневая директория по умолчанию для nginx на Ubuntu 16.04 — /var/www/html.
4 Установка PHP 7
Мы можем заставить PHP работать в nginx через PHP-FPM (PHP-FPM (FastCGI Process Manager) — это альтернативная реализация PHP FastCGI с некоторыми дополнительными функциями, полезными для сайтов любого размера, особенно более загруженных сайтов), который мы устанавливаем следующим образом:
apt-get -y install php7.0-fpmPHP-FPM — это демон-процесс (с init-скриптом php7.0-fpm), который запускает сервер FastCGI на сокете /run/php/php7.0-fpm.sock.
5 Конфигурация nginx
Конфигурация nginx находится в /etc/nginx/nginx.conf, который мы сейчас откроем:
nano /etc/nginx/nginx.confКонфигурация проста для понимания (вы можете узнать больше об этом здесь: http://wiki.nginx.org/NginxFullExample и здесь: http://wiki.nginx.org/NginxFullExample2)
Сначала (это необязательно) настройте keepalive_timeout на разумное значение:
[...]
keepalive_timeout 2;
[...] Виртуальные хосты определяются в контейнерах server {}. Стандартный виртуальный хост определяется в файле /etc/nginx/sites-available/default — давайте изменим его следующим образом:
nano /etc/nginx/sites-available/default[...]
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
[...] servername ; делает это стандартным виртуальным хостом (конечно, вы также можете указать имя хоста, например www.example.com).
root /var/www/html; означает, что корневая директория — это каталог /var/www/html.
Важная часть для PHP — это блок location ~ .php$ {}. Раскомментируйте его, чтобы включить.
Теперь сохраните файл и перезагрузите nginx:
service nginx reloadДалее откройте /etc/php/7.0/fpm/php.ini…
nano /etc/php/7.0/fpm/php.ini… и установите cgi.fix_pathinfo=0:
[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting
; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...] Перезагрузите PHP-FPM:
service php7.0-fpm reloadТеперь создайте следующий PHP-файл в корневой директории /var/www/html:
nano /var/www/html/info.phpТеперь мы вызываем этот файл в браузере (например, http://192.168.1.100/info.php):

Как вы видите, PHP 7 работает, и он работает через FPM/FastCGI, как показано в строке Server API. Если вы прокрутите дальше вниз, вы увидите все модули, которые уже включены в PHP. MySQL там не указан, что означает, что у нас еще нет поддержки MySQL в PHP.
6 Получение поддержки MySQL в PHP 7
Чтобы получить поддержку MySQL в PHP, мы можем установить пакет php7.0-mysql. Также неплохо установить некоторые другие модули PHP, так как они могут понадобиться для ваших приложений. Вы можете искать доступные модули PHP следующим образом:
apt-cache search php7.0Выберите те, которые вам нужны, и установите их следующим образом:
apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettextAPCu — это расширение для модуля PHP Opcache, который поставляется с PHP 7, оно добавляет некоторые функции совместимости для программного обеспечения, поддерживающего кэш APC (например, плагины кэша Wordpress).
APCu можно установить следующим образом:
apt-get -y install php-apcuТеперь перезагрузите PHP-FPM:
service php7.0-fpm reloadТеперь перезагрузите http://192.168.1.100/info.php в вашем браузере и снова прокрутите вниз до раздела модулей. Теперь вы должны увидеть много новых модулей, включая модуль MySQL:

7 Настройка PHP-FPM для использования TCP-соединения
По умолчанию PHP-FPM слушает на сокете /var/run/php/php7.0-fpm.sock. Также возможно заставить PHP-FPM использовать TCP-соединение. Для этого откройте /etc/php/7.0/fpm/pool.d/www.conf…
nano /etc/php/7.0/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:
php7.0-fpm reloadДалее пройдите через вашу конфигурацию nginx и все ваши виртуальные хосты и измените строку fastcgi_pass unix:/ var/run/ php /php7.0-fpm.soc k; на fastcgi_pass 127.0.0.1:9000;, например, вот так:
nano /etc/nginx/sites-available/default[...]
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php7.0-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
[...] Наконец, перезагрузите nginx:
service nginx reloadВот и все. Сервер Nginx LEMP установлен.
8 Ссылки
- nginx: http://nginx.net/
- nginx Wiki: http://wiki.codemongers.com/Main
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- Ubuntu: http://www.ubuntu.com/
Get new posts in your inbox
No spam. Unsubscribe anytime.