Настраиваем LNMP на Ubuntu Server 18.04 | 19.04 | 20.04

В сегодняшней статье рассмотрим базовую настройку LNMP(LEMP) (Linux Nginx MySQL PHP) на Ubuntu Server.

В Качестве подопытного я использую VDS сервер на минимальной конфигурации, а если быть точнее, то в моем случае конфигурация следующая:

  • CPU 1×2.4 GHz
  • RAM 0.5 GB
  • HDD 5 GB
  • OS Ubuntu Server 18.04

Так как при покупке VDS сервера в нем отсутствует русская локаль, то сперва я конечно же настроил для себя кириллицу. Вот ссылка для русификации вашего сервера (статья для Ubuntu Server 16.04, но все действия идентичны «по картинкам разберетесь 🙂 «)

Установка LNMP (LEMP) на Ubuntu Server

Так двигаемся дальше. Устанавливаем необходимые репозитории:

Для более свежего интерпретатора PHP

sudo add-apt-repository ppa:ondrej/php

Для более свежего WEB сервера Nginx

sudo add-apt-repository ppa:ondrej/nginx

Теперь обновим индексы и систему.

sudo apt update && sudo apt dist-upgrade -y

Установка веб-сервера Nginx

Nginx – это популярный легковесный web-сервер использующейся на многих интернет ресурсах.

sudo apt install nginx

Сразу после установка Nginx должен начать работать. Проверим можно командой:

sudo service nginx status
nginx.service - A high performance web server and a reverse proxy server
    Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
    Active: active (running) since Sun 2019-12-29 17:38:27 MSK; 51min ago
.....

Если не запущен:

sudo service nginx start

Для проверки работоспособности web-сервера попробуем зайти по ip-адресу нашего сервера.

welcom to Nginx

По умолчанию тестовая страница храниться в каталоге

/var/www/html

Настройка Nginx

Итак, мы установили web-сервер. Теперь его нужно немного настроить. Из коробки Nginx довольно хорошо оптимизирован, однако есть несколько важных настроек, изменив которые можно улучшить производительность.

ulimit -n

данная команда выведет максимальное количество одновременно обрабатываемых соединений.

1024

Вот теперь открываем конфигурационный файл nginx:

sudo nano /etc/nginx/nginx.conf

Внесите следующие изменения для повышения потенциальной производительности. Устанавливаем значение worker_processes по кол-ву ядер в системе:

worker_processes       1; 

А также меняем директиву worker_connections :

worker_connections     1024;

Снимаем комментарий со строки со значением

multi_accept on;

данный параметр информирует nginx о принятии максимального количества соединений за один раз.

Снимаем комментарий с пункт:

server_tokens off;

данный параметр отключить вывод номера версии Nginx в сообщениях об ошибках и заголовках ответов, что в свою очередь улучшает безопасность.

Время ожидания

Лимит времени ожидания может также резко повысить производительность. Добавим или исправим следующие параметры:

client_body_timeout             12; 
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
  • client_body_timeout и client_header_timeout: отвечают за интервал времени, на протяжении которого сервер будет ждать тело запроса или заголовок запроса от клиента. Если ни тело или заголовок не были получены, сервер выдаст ошибку 408 (Request time out).
  • keepalive_timeout: устанавливает лимит времени ожидания Keep-Alive соединения с клиентом. Проще говоря, Nginx закроет соединения с клиентом по истечении этого периода времени.
  • send_timeout: ограничивает время ответа клиенту. Она устанавливается не на всю передачу ответа, а только на две операции чтения; если по истечении этого времени клиент ничего не примет, то Nginx прервет соединение.

Буфер обмена

Размер буфера – следующий невероятно важный аспект, который требует тонкой настройки. Если размер буфера слишком мал, то Nginx придется писать во временный файл, из-за чего диску придется постоянно считывать и записывать. Прежде чем принимать какое-либо решение, нужно учесть некоторые директивы.

Для этого создаем файл или же заносим в сам конфигурационный файл nginx в секцию http. Я пойду первым способо:

sudo nano /etc/nginx/conf.d/buffer.conf
client_body_buffer_size        10K;
client_header_buffer_size      1k;
client_max_body_size           10m;
large_client_header_buffers 2  1k;
  • client_body_buffer_size: данная директива обрабатывает размер буфера клиента, то есть любые POST-запросы, отправленные на Nginx.
  • client_header_buffer_size: эта директива подобна предыдущей, только вместо размера буфера она обрабатывает размер заголовка клиента. Для всех целей 1K, как правило, достаточно.
  • client_max_body_size: максимально допустимый размер запроса клиента. Если максимальный размер превышен, то Nginx выведет ошибку 413 (Request Entity Too Large).
  • large_client_header_buffers: максимальное количество и размер буферов больших заголовков клиентов.

Gzip сжатие

Несмотря на то, что повсюду в мире распространился широкополосный интернет, не следует забывать о мобильных устройствах, где скорость подчас оставляет желать лучшего.  Поэтому отредактируем несколько строк, посвященных сжатию отдаваемой информации.

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  • gzip_comp_level: установим значение 5. Данный уровень сжатия приблизительно на 75% уменьшает размер файлов ASCII любого типа без существенного потребления процессора.
  • gzip_min_length 256: файл, не превышающий 256 байт, не будет разархивирован.

Проверка nginx

Для проверки наших изменений набираем следующую команду

sudo nginx -t

Если Nginx не ругается на ошибки, перегружаем его:

sudo service nginx restart

Установка PHP

Для установки php выполним команду:

sudo apt install php7.4 php7.4-common php7.4-cli php7.4-fpm php7.4-gd php7.4-mysql php7.4-mbstring php7.4-curl php7.4-xml php7.4-zip php7.4-json php7.4-imagick php7.4-xmlrpc php7.4-bz2 php7.4-dev php7.4-opcache zip mc

Включаем выполнение php в nginx

Отредактируем конфигурационный файл.

sudo nano /etc/nginx/sites-available/default

Найдем строку

index index.html index.htm index.nginx-debian.html;

приведем ее к виду:

index index.php index.html index.htm;

Пролистаем вниз и найдем такую секцию:

# pass PHP scripts to FastCGI server     #

Отредактируем, убрав кое-где знак #, чтобы получилось вот так:

    # pass PHP scripts to FastCGI server     #     
location ~ \.php$ {             
         include snippets/fastcgi-php.conf;     
#   With php-fpm (or other unix sockets):    #         
         fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;     
# With php-cgi (or other tcp sockets):     #
#       fastcgi_pass 127.0.0.1:9000;     
}

и перезапустим наш web-сервер:

sudo service nginx reload

Тест PHP

Проверим, работает ли php. Для этого создадим файл  index.php

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

и добавим в него такой текст:

<?php  phpinfo(); ?>

Сохраните файл и зайдите интернет-браузером на сайт. Если все хорошо, то отобразятся логотип, версия и текущие настройки PHP.

Настройка PHP.INI

Открываем конфигурационный файл php

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

Необходимо найти строку upload_max_filesize и установить значение, одинаковое значению client_max_body_size в файле nginx.conf

upload_max_filesize = 20m

Также необходимо найти параметр  cgi.fix_pathinfo и поменять его значение с ‘1’ на ‘0’.

cgi.fix_pathinfo=0

И в завершении, найдем еще один параметр post_max_size и установим ему значение побольше:

 post_max_size = 20m

Для корректного отображения времени установим свой часовой пояс:

date.timezone = Europe/Moscow

Перезапустим php

/etc/init.d/php7.4-fpm restart

Установка MySQL

Если вы знакомы с установкой MySQL, то вы найдете, что эта процедура для MariaDB практически не отличается.

sudo apt-get install mysql-server mysql-client

Настройка MySQL (MariaDB)

Теперь нам нужно усилить параметры безопасности MySQL (MariaDB).

sudo mysql_secure_installation

Установка phpmyadmin

Для установки программ управления базами данных при помощи WEB интерфейсов необходимо набрать следующую команду:

sudo apt install phpmyadmin

при установке не ставим галочки на вопрос для какого сервера требуется настроить наш phpmyadmin

Теперь что бы можно было через web интерфейс подключиться к БД, давайте создадим конфигурационный файл для phpmyadmin:

sudo nano /etc/nginx/conf.d/phpmyadmin.inc

И внесем в него следующие строки:

location /phpmyadmin {
         alias /usr/share/phpmyadmin/;
   location ~ /(libraries|setup) {
         return 404;
   }
   location ~ ^/phpmyadmin/(.*\.php)$ {     
         alias /usr/share/phpmyadmin/$1;     
         fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;     
         fastcgi_index index.php;     
         include fastcgi_params;     
         fastcgi_param SCRIPT_FILENAME $request_filename; 
   } 
   location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {     
         root /usr/share/; 
   }
}

И также добавим в конфигурационный файл домена следующую строчку:

include     /etc/nginx/conf.d/phpmyadmin.inc*;

Данную секцию добавьте перед последней закрывающейся }

Теперь можно перезагрузить nginx

sudo service nginx restart

И зайти по IP адресу типа: 80.81.82.83/phpmyadmin.

вводим пользователя phpmyadmin и ваш пароль на этапе установки phpmyadmin и подключаемся к БД mysql

Для установки более новой версии phpmyadmin выполним следующие действия:

cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip
unzip phpMyAdmin-5.0.2-all-languages.zip
sudo mv /usr/share/phpmyadmin /usr/share/phpmyadmin.old
sudo mv /tmp/phpMyAdmin-5.0.2-all-languages /usr/share/phpmyadmin

ПОЛУЧЕНИЯ РЕЙТИНГА A+ ДЛЯ ДОМЕНА

Для получения высокой оценки вашего домена на сайте ssllabs.com необходимо выполнить некоторые действия описанные в данной статье.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

0 0 vote
Рейтинг статьи
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

3 Комментарий
новее
старее большинство голосов
Inline Feedbacks
Просмотреть все комментарии
sashokaaa
sashokaaa
09.03.2020 11:16

Поменяй плиз:
sudo nano /etc/php/7.0/fpm/php.ini на sudo nano /etc/php/7.4/fpm/php.ini
и
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; на fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
а так ман хорошь, спасибо!

Макс
Макс
23.01.2020 15:26

После всей установки пишет — Невозможно подключиться к серверу MySQL. mysqli::real_connect(): (HY000/1045): Access denied for user ‘phpmyadmin’@’localhost’ (using password: YES). В чем может быть дело?