В сегодняшней статье рассмотрим базовую настройку 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-адресу нашего сервера.
По умолчанию тестовая страница храниться в каталоге
/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 необходимо выполнить некоторые действия описанные в данной статье.