Установка серверов · 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 -s

2 Установка 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_installation
Securing the MySQL server deployment.
Enter password for user root: <-- Введите пароль root MySQL
VALIDATE 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 apache2

Nginx доступен как пакет для Ubuntu 16.04, который мы можем установить.

apt-get -y install nginx

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

service nginx start

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

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

Корневая директория по умолчанию для 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-fpm

PHP-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 Info на Ubuntu с Nginx.

Как вы видите, 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-gettext

APCu — это расширение для модуля 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:

Модули PHP были установлены.

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 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.