Введение
Немного расскажу своими словами о том, как работает модуль ngx_http_proxy_module. Именно он реализует весь функционал, о котором пойдет речь. Допустим, у вас в локальной или виртуальной сети есть какие-то сервисы, не имеющие прямого доступа из интернета. А вы хотите таковой иметь. Можно пробрасывать нужные порты на шлюзе, можно что-то еще придумывать. А можно сделать проще всего — настроить единую точку входа на все свои сервисы в виде nginx сервера и с него проксировать различные запросы к нужным серверам.
Расскажу на конкретных примерах, где я это использую. Для наглядности и простоты буду прям по порядку перечислять эти варианты:
- Ранее я рассказывал о настройке чат серверов — matrix и mattermost. В этих статьях я как раз рассказывал о том, как проксировать запросы в чат с помощью nginx. Прошелся по теме вскользь, не останавливаясь подробно. Суть в том, что вы настраиваете на любом виртуальном сервере эти чаты, помещаете их в закрытые периметры сети без лишних доступов и просто проксируете запросы на эти сервера. Они идут через nginx, который у вас смотрит во внешний интернет и принимает все входящие соединения.
- Допустим, у вас есть большой сервер с множеством контейнеров, например докера. На нем работает множество различных сервисов. Вы устанавливаете еще один контейнер с чистым nginx, на нем настраиваете проксирование запросов на эти контейнеры. Сами контейнеры мапите только к локальному интерфейсу сервера. Таким образом, они будут полностью закрыты извне, и при этом вы можете гибко управлять доступом.
- Еще один популярный пример. Допустим, у вас есть сервер с гипервизором proxmox или любым другим. Вы настраиваете на одной из виртуальных машин шлюз, создаете локальную сеть только из виртуальных машин без доступа в нее извне. Делаете в этой локальной сети для всех виртуальных машин шлюз по-умолчанию в виде вашей виртуальной машины со шлюзом. На виртуальных серверах в локальной сети размещаете различные сервисы и не заморачиваетесь с настройками фаервола на них. Вся их сеть все равно не доступна из интернета. А доступ к сервисам проксируете с помощью nginx, установленным на шлюз или на отдельной виртуальной машине с проброшенными на нее портами.
- Мой личный пример. У меня дома есть сервер synology. Я хочу организовать к нему простой доступ по https из браузера по доменному имени. Нет ничего проще. Настраиваю на сервере nginx получение бесплатного сертификата , настраиваю проксирование запросов на мой домашний ip, там на шлюзе делаю проброс внутрь локалки на synology сервер. При этом я могу фаерволом ограничить доступ к серверу только одним ip, на котором работает nginx. В итоге на самом synology вообще ничего не надо делать. Он и знать не знает, что к нему заходят по https, по стандартному порту 443.
- Допустим, у вас большой проект, разбитый на составные части, которые живут на разных серверах. К примеру, на отдельном сервере живет форум, по пути /forum от основного домена. Вы просто берете и настраиваете проксирование всех запросов по адресу /forum на отдельный сервер. Точно так же можно без проблем все картинки перенести на другой сервер и проксировать к ним запросы. То есть вы можете создать любой location и переадресовывать запросы к нему на другие сервера.
Надеюсь в общем и целом понятно, о чем идет речь. Вариантов использования много. Я привел самые распространенные, которые пришли в голову и которые использую сам. Из плюсов, которые считаю наиболее полезными именно из своих кейсов, отмечу 2:
- Без проблем можете настроить https доступ к сервисам, при этом совершенно не трогая эти сервисы. Вы получаете и используете сертификаты на nginx сервере, используете https соединение с ним, а сам nginx уже передает информацию на сервера со службами, которые могут работать по обычному http и знать не знают о https.
- Вы очень легко можете менять адреса, куда проксируете запросы. Допустим у вас есть сайт, его запросы проксируются на отдельный сервер. Вы подготовили обновление или переезд сайта. Отладили все на новом сервере. Теперь вам достаточно на сервере nginx изменить адрес старого сервера на новый, куда будут перенаправляться запросы. И все. Если что-то пойдет не так, можете оперативно вернуть все обратно.
С теорией закончил. Перейдем теперь к примерам настройки. В своих примерах я буду использовать следующие обозначения:
blog.zeroxzed.ru | доменное имя тестового сайта |
nginx_srv | имя внешнего сервера с установленным nginx |
blog_srv | локальный сервер с сайтом, куда проксируем соединения |
94.142.141.246 | внешний ip nginx_srv |
192.168.13.31 | ip адрес blog_srv |
77.37.224.139 | ip адрес клиента, с которого я буду заходить на сайт |
FPM
SAPI, он же Server API. В php есть несколько таких API для разных вариантов его работы:
-
CLI SAPI — в качестве консольной команды `php` для запуска наших кронов и других cli-программ (Command Line Interface)
-
apxs2 SAPI — в качестве модуля к apache2
-
CGI SAPI — в качестве запускаемого на каждом запросе CGI (сейчас так почти никто не делает)
-
FPM SAPI — Fast Process Manager, написанный для PHP разработчиками из комании Badoo и теперь поддерживаемый сообществом
Работа с FPM отличается от работы с Apache в первую очередь тем, что FPM — это только PHP. Это не веб-сервер, не что-то умное. Это наоборот — максимально простой, легкий и быстрый менеджер процессов для PHP. В отличие от апача, он даже не использует http-протокол, а работает со специальным fastcgi-протоколом. В первую очередь FPM быстрее обрабатывает запросы благодаря его легковесности и простоте.
Во вторую очередь, FPM действительно умный менеджер процессов. Он контролирует количество работающих PHP-процессов, частоту их перезапуска для борьбы с утечками памяти (да, модули php как и всегда текут) и прочие простые вещи, необходимые для контроля сервера.
Нужно помнить, что независимо от того, какое SAPI вы используете, будь то модуль Apache, CGI или PHP-FPM — это не отнимает ни каких особенностей php. А первая его особенность:
-
Один процесс одновременно обрабатывает один запрос. Это абсолютно так же свойственно для PHP-FPM, как и для Apache.
-
Количество процессов определяет, сколько одновременно может «висеть» запросов в обработке.
-
Точно также, как и Apache, FPM подвержен DoS-атакам путем «длительных запросов». Допустим, у Вас на сервере работает не более 50-ти процессов PHP-FPM, а это значит, что если 50 пользователей одновременно начнут делать upload файла (пусть даже небольшого, но главное, чтобы они делали это медленно) — пятьдесят первый пользователь получит ошибку 504, т.к. FPM не возьмет его запрос на обработку, пока не разберется с теми, что у него уже есть.
Сервер RoadRunner
Наладить коммуникацию между Golang и РНР-процессами.
Управление процессами: создание, уничтожение, мониторинг воркеров.
Балансирование задач — эффективная раздача задач воркерам
Поскольку мы реализуем систему, которая блокирует отдельный воркер на отдельную конкретную приходящую задачу, важно сделать систему, которая быстро бы говорила, что процесс закончил работу и готов принимать следующую задачу.
HTTP-стек — передача данных HTTP-запроса воркеру. Это простая задача — написать входящую точку, в которую пользователь посылает запрос, который передается PHP и возвращается обратно.
Варианты взаимодействия между процессами
Embedding: встраивание PHP-интерпретатора непосредственно в Golang.go-phpShared Memory — использование общего пространства памяти,где процессы делят это пространство
HTTP-стек
Как реализуется:
- поднимает HTTP-точку на стороне Golang;
- получаем запрос;
- преобразуем в формат PSR-7;
- передаем запрос первому свободному воркеру;
- распаковываем запрос в PSR-7-объект;
- обрабатываем;
- генерируем ответ.
библиотеку Golang NET/HTTP.независимый фреймворкиммутабеленминимальная обвязка
Сборка
Какие фреймворки есть у PHP
На PHP уже почти не пишут вчистую. Вместо этого используют фреймворки — наборы пакетов и библиотек, которые задают каркас проекта. С помощью фреймворка можно быстро создавать шаблонные страницы, блоки сайта или приложения.
Например, чтобы добавить на сайт авторизацию пользователей, на чистом PHP пришлось бы написать десятки строк кода и продумать механизмы безопасности. А с фреймворком нужно лишь прописать несколько методов и указать необходимые параметры в настройках. При этом в шаблоне уже будет встроена система безопасности, стойкая ко взломам.
Для PHP написано более 20 фреймворков, но чаще всего в энтерпрайзе используют следующие:
- Laravel — самый популярный фреймворк PHP, создан в 2011 году;
- Symfony — славится надёжностью и соответствием веб-стандартам;
- Laminas (потомок Zend Framework) — позволяет подключать много сторонних библиотек, но немного сложнее остальных фреймворков;
- Yii2 — считается самым быстрым фреймворком PHP;
- CodeIgniter — один из самых простых в изучении.
Что такое программирование серверной части сайта?
Веб-браузеры взаимодействуют с веб-серверами при помощи гипертекстового транспортного протокола (HTTP). Когда вы нажимаете на ссылку на веб-странице, заполняете форму или запускаете поиск, HTTP-запрос отправляется из вашего браузера на целевой сервер.
Запрос включает в себя URL, определяющий затронутый ресурс, метод, определяющий требуемое действие (например, получить, удалить или опубликовать ресурс) и может включать дополнительную информацию, закодированную в параметрах URL (пары поле-значение, оправленные как строка запроса), как POST запрос (данные, отправленные методом HTTP POST) или в куки-файлах.
Веб-серверы ожидают сообщений с клиентскими запросами, обрабатывают их по прибытию и отвечают веб-браузеру при помощи ответного HTTP сообщения (HTTP-ответ). Ответ содержит строку состояния, показывающую, был ли запрос успешным или нет (например, «HTTP/1.1 200 OK» в случае успеха).
Тело успешного ответа на запрос может содержать запрашиваемые данные (например, новую HTML-страницу или изображение, и т. п.), который может отображаться через веб-браузер.
Схема ниже показывает базовую архитектуру веб-сервера для статического сайта (статический сайт — это тот, который возвращает одно и то же жёстко закодированное содержимое с сервера всякий раз, когда запрашивается конкретный ресурс). Когда пользователь хочет перейти на страницу, браузер отправляет HTTP-запрос «GET» с указанием его URL.
Сервер извлекает запрошенный документ из своей файловой системы и возвращает HTTP-ответ, содержащий документ и (обычно 200 OK). Если файл не может быть извлечён по каким-либо причинам, возвращается статус ошибки (смотри и ).
Обзор версий: между первой и седьмой
Версии с первой по третью были «сырыми»: мало возможностей, хотя для создания простых сайтов их хватало. С версии 5.4 PHP стал отлаженной технологией. До этого было слишком много нюансов, и работать с ними было непросто.
Релизы 5.5 и 5.6 — серьезные, проверенные временем вещи. Они отлично себя показали и достаточно защищены от инъекций и возможностей взлома.
Шестую версию пропустили: она должна была поддерживать Unicode на уровне ядра, но релиз не состоялся. «PHP6 был амбициозным, но отстойным. Вот почему мы занялись PHP 7, в процессе пропустив шестую версию», — прокомментировал в своем блоге Vilson Duka, один из разработчиков.
Анимационное видео Питера Кокота о развитии ключевых модулей PHP в течение21 года жизни языка.
Седьмая версия считается революционной в плане скорости. 5.6 медленно работала с массивами и вообще с переменными: обработка статически нетипизированных данных происходила долго. Строка обрабатывалась в 60 раз медленнее, чем на C#. Это не бросается в глаза — речь о долях секунды. Но когда у тебя миллиард пользователей, как на Facebook, скорость критична.
Что такое пользовательская директория сервера и где она находится по умолчанию (для windows систем)?
- это директория, выделенная пользователю для личных нужд, файлы которой обрабатываются сервером. Находится в «C:/Program Files/Apache Group/Apache/htdocs/users/»
- (Правильный ответ) это директория, выделенная пользователю для личных нужд, файлы которой обрабатываются сервером, если он получает запрос типа ~user. Находится в «C:/Program Files/Apache Group/Apache/users/»
- это директория, выделенная пользователю для личных нужд, файлы которой никогда не обрабатываются сервером. Находится в «C:/Program Files/Apache Group/Apache/users/»
- это директория, выделенная пользователю для личных нужд, файлы которой обрабатываются сервером, если он получает запрос типа ~user. Находится в «C:/Program Files/Apache Group/Apache/htdocs/users/»
Установка Memcached
Первым этапом мы установим и настроим сервис memcached. Вторым — модуль php-memcached.
Сервис memcached
Выполняем установку пакетов:
dnf install memcached libmemcached
Создаем или открываем на редактирование конфигурационный файл для запуска сервиса:
vi /etc/sysconfig/memcached
Приводим его к виду:
PORT=»11211″
USER=»memcached»
MAXCONN=»1024″
CACHESIZE=»512″
OPTIONS=»-l 127.0.0.1 -U 0″
* где PORT указываем на каком порту будет слушать сервис кэширования; USER — пользователь, под которым должен запускаться сервис; MAXCONN — максимальное число одновременных подключений; CACHESIZE — размер под кэш в мегабайтах; OPTIONS — параметры запуска (в данном примере наш сервис будет принимать запросы только с адреса локальной петли).
После разрешаем автозапуск и запускаем сервис кэширования:
systemctl enable memcached —now
Модуль для php
Переходим на страницу загрузки memcached сайта pecl.php.net и копируем ссылку на стабильную версию memcached:
Обратите внимание, что у каждой версии пакета есть свои требования к версии PHP. Внимательно изучаем, подойдет ли версия php-memcached для нашего сервера
Скачиваем архив, ссылку на который мы скопировали:
wget http://pecl.php.net/get/memcached-3.1.5.tgz
Устанавливаем пакеты, необходимые для сборки php-pecl-memcached:
dnf install php-devel zlib-devel make
dnf —enablerepo=PowerTools install libmemcached-devel
Распаковываем скачанный архив:
tar -xvzf memcached-*.tgz
Переходим в распакованный каталог:
cd memcached-*/
Запускаем компиляцию php-расширения:
phpize
Конфигурируем исходник:
./configure
Собираем расширение:
make
Копируем созданный модуль в каталог php-модулей:
cp modules/memcached.so /usr/lib64/php/modules/
Создаем конфигурационной файл для подключения расширения:
vi /etc/php.d/20-memcached.ini
extension=memcached.so
После установки модуля перезапускаем php-fpm:
systemctl restart php-fpm
… или вводим команду:
php -m | grep memcached
Мы должны получить:
memcached
Установка PHP
Если у вас уже был установлен php в виде модуля апача, то перед установкой php-fpm нужно будет удалить предыдущие версии php:yum remove mod_php* php*
Для установки новой версии php в CentOS приходится использовать сторонний репозитарий. Для CentOS на выбор есть два популярных репозитария: webtatic и Remi. После некоторого тестирования и реального использования в боевом сервере репозитарий от Remi показал себя наиболее полным и стабильно поддерживаемым. Поэтому при выборе репозитария я советую использовать Remi.Если хотите установить из репозитария webtatic (Сайт проектка https://webtatic.com/), инструкция здесь:Команда установки:
Если устанавливать через репозитарий Remi, то инструкция такая:
Выбираем какую версию php будем устанавливать:
Теперь ставим PHP:
После установки php-fpm надо будет еще правильно его настроить. Идеи настройки были взяты из руководства https://www.stephenrlang.com/2018/02/centos-7-apache-2-4-with-php-fpm/ и доработаны для стабильной работы в условиях боевого сервера. К сожалению, если полностью скопировать настройки оттуда – сервер ведет себя нестабильно.
Создаем файл со следующим содержимым:
Директива нужна для нормальной работы кастомных ошибок, которые настраиваются через htaccess в каждом сайте с помощью директивы ErrorDocument 404. Нужно учитывать, что в этом случае вместо 500 ошибок так же будет выводиться кастомная страница или стандартное сообщение об ошибке Apache. Если для написания сайта используется php фреймворк (например Laravel или Joomla) лучше оставить директиву отключенной – иначе сайт может работать неверно (например не будет работать перевод сайта в offline). Связано это с действием директив php throw. В том случае, если вы пишите сайт на голом php – возможно включение этой директивы поможет вам в работе. Ее можно включить на уровне виртуальных хостов (и это самый лучший способ так сделать).
Теперь приступаем к редактированию файла
Ищем в нем строку , закрываем ее комментарием и добавляем строки, которые указаны ниже. В итоге должно получиться вот так:
Если вы хотите чтобы в apache логи php-fpm разбивались индивидуально по сайтам, а не сваливались в одну кучу в одном файле, нужно будет закомментировать еще две строки в этом же файле ():
Если есть экзотическое желание заставить работать страницы .html как .php (чтобы в них могли исполняться php скрипты), то придется исправить еще одну строку в этом файле:
Здесь мы добавляем расширение .html для того, чтобы в нем могли исполняться php скрипты.
Директории для сессий при установке php могут быть не созданы. Проверьте в конце файла наличие строк:
и если необходимо — создайте эти подкаталоги:
Теперь проверим что конфигурационный файл php-fpm корректен:
Если надо установить отладку (учтите что для версии php 7.3 пока еще отладка не доступна), установите пакет rpm php72w-pecl-xdebug (не делайте этого на рабочем сервере! – это только дома для тестирования!):
Пишу еще раз! Не устанавливайте xdebug на продакшен сервере! Это только для домашнего тестирования и отладки!
Теперь запустим PHP и сделаем так, чтобы при перезагрузке сервера, он так же запускался автоматически:
Продолжаем настройку PHP – в файле найдите эти параметры и исправьте на приведенные значения (или на те, которые вас устроят):
Установка NGINX
Устанавливаем NGINX:
apt-get install nginx
Внесем изменение в файл nginx.conf:
vi /etc/nginx/nginx.conf
http {
…
server_names_hash_bucket_size 64;
….
}
* в данном примере мы сняли комментарий со строчки server_names_hash_bucket_size 64;* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.
Перезапускаем nginx:
systemctl enable nginx
systemctl restart nginx
* в процессе запуска мы можем увидим ошибку — возможно, в системе работает другой веб-сервер и занимает 80 порт. Как правило, это apache. Чтобы его выключить (на данном этапе он нам не нужен) вводим команду systemctl stop apache2.
Проверим работу веб-сервера. Открываем браузер и вводим в адресной строке http://<IP-адрес сервера>. В итоге мы должны увидеть заголовок «Welcome to nginx!»:
Если стартовая страница не загружается, проверяем состояние сервиса:
systemctl status nginx
Настройка и запуск Nginx + php-fpm:
1. Начнем с php-fpm: откройте файл конфигурации
и пропишите там работу через сокет (так будет работать быстрее):
измените существующую строчку «listen =» или добавьте новую и удалите старую.
2. Теперь перейдем к Nginx: создайте файл конфигурации для своего первого сайта (site1 замените на название сайта, хотя будет работать и так)
Ниже приведена минимальная конфигурация, можете просто ее скопировать. Все что надо заменить, выделено красным. В данной конфигурации настроена отдача статических файлов и доступ к одному php-файлу — index.php. Все современные CMS запускаются одним файлом, поэтому такая конфигурация подойдет для большинства задач. Если вам надо запускать другие php-файлы, пропишите их отдельно. В данной конфигурации файлы сайта надо положить в папку /home/mysite/public_html/
Теперь положите файлы вашего первого сайта в папку /home/site1/public_html/ и мы готовы к запуску.
3. Запуск nginx + php-fpm:
Если вы все сделали правильно и нигде не ошиблись, результат будет такой:
Если у вас остались вопросы или нужны уточнения — пожалуйста, задайте вопрос или оставьте комментарий.
Я всегда рад помочь!
Удачи вам!
Рабочий цикл программы
При использовании любого языка программирования существует определенный рабочий цикл создания кода. Вы пишете его, запускаете, находите ошибки и отлаживаете. Таким образом, вы переписываете и дописываете программу, проверяете ее. То, о чем пойдет речь в этой статье, это «запускаемая» часть программы.
Когда пишете программу, вы хотите, чтобы ее инструкции работали на компьютере. Компьютер обрабатывает информацию с помощью процессора, который поэтапно выполняет инструкции, закодированные в двоичном формате. Как из выражения «a = 3;» получить закодированные инструкции, которые процессор может понять?
Мы делаем это с помощью компиляции. Существует специальные приложения, известные как компиляторы. Они принимают программу, которую вы написали. Затем анализируют и разбирают каждую часть программы и строят машинный код для процессора. Часто его также называют объектным кодом.
На одном из этапов процесса обработки задействуется компоновщик, принимающий части программы, которые отдельно были преобразованы в объектный код, и связывает их в один исполняемый файл. Вот схема, описывающая данный процесс:
Конечным элементом этого процесса является исполняемый файл. Когда вы запускаете или сообщаете компьютеру, что это исполняемый файл, он берет первую же инструкцию из него, не фильтрует, не преобразует, а сразу запускает программу и выполняет ее без какого-либо дополнительного преобразования. Это ключевая характеристика процесса компиляции — его результат должен быть исполняемым файлом, не требующим дополнительного перевода, чтобы процессор мог начать выполнять первую инструкцию и все следующие за ней.
Первые компиляторы были написаны непосредственно через машинный код или с использованием ассемблеров. Но цель компилятора очевидна: перевести программу в исполняемый машинный код для конкретного процессора.
Некоторые языки программирования разрабатывались с учетом компиляции. C, например, предназначался для того, чтобы дать возможность программистам с легкостью реализовать разные вещи. Но в итоге он разрабатывался таким образом, чтобы его можно было легко перевести на машинный код. Компиляция в программировании это серьезно!
Не все языки программирования учитывают это в своей концепции. Например, Java предназначался для запуска в «интерпретирующей» среде, а Python всегда должен интерпретироваться.
Копилка
-
Как на крыльях бабочек создается защитное изображение змеи
Бабочки, конечно, ничего не знают о змеях. Зато о них знают птицы, охотящиеся на бабочек. Птицы, плохо распознающие змей, чаще становятся…
-
Если octo на латыни «восемь», то почему октава содержит семь нот?
Октавой называется интервал между двумя ближайшими одноименными звуками: до и до, ре и ре и т. д. С точки зрения физики «родство» этих…
-
Почему важных особ называют августейшими?
В 27 году до н. э. римский император Октавиан получил титул Август, что на латыни означает «священный» (в честь этого же деятеля, кстати,…
-
Чем пишут в космосе
Известная шутка гласит: «NASA потратило несколько миллионов долларов, чтобы разработать специальную ручку, способную писать в космосе….
-
Почему основа жизни — углерод?
Известно порядка 10 миллионов органических (то есть основанных на углероде) и лишь около 100 тысяч неорганических молекул. Вдобавок…
-
Почему кварцевые лампы синие?
В отличие от обычного стекла, кварцевое пропускает ультрафиолет. В кварцевых лампах источником ультрафиолета служит газовый разряд в парах ртути. Он…
-
Почему дождь иногда льет, а иногда моросит?
При большом перепаде температур внутри облака возникают мощные восходящие потоки. Благодаря им капли могут долго держаться в воздухе и…
Дан массив $b = array(«23aaa»,»4″,»qww»,»c», 3). Найти в массиве число 3, не перебирая все элементы массива. Если элемент найден, вывести значение его ключа.
- <?php$b = array(«»23aaa»»,»»4″»,»»qww»»,»»c»», 3);$index = array_search($b,»»3″»);if ($index === false) echo»»Нет такого числа в массиве»»;else { echo»»Число найдено с ключом «»; echo $index;}?>
- <?php$b = array(«»23aaa»»,»»4″»,»»qww»»,»»c»», 3);if (!array_search(«»3″»,$b)) echo»»Нет такого числа в массиве»»;else { echo»»Число найдено с ключом «»; echo array_search(«»3″»,$b);}?>
-
(Правильный ответ)
<?php$b = array(«»23aaa»»,»»4″»,»»qww»»,»»c»», 3);$index = array_search(3,$b,true);if ($index === false) echo»»Нет такого числа в массиве»»;else { echo»»Число найдено с ключом «»; echo $index;}?>
Что делает приведенная ниже программа.
<?php $f = fopen(«»file.html»», «»r»»);echo fread($f, 1024);fclose($f);?>
- открывает файл file.html только для записи. Дописывает в конец файла строку «1024». Если файла с именем file.html не существует в директории скрипта, то он будет создан и в него запишется слово «1024». Закрывает соединение с файлом
- (Правильный ответ) открывает файл file.html только для чтения. Считывает 1024 байт текста из файла и выводит его на экран. Закрывает соединение с файлом
- открывает файл file.html для записи и чтения. Считывает 1024 символа из файла и выводит его на экран. Закрывает соединение с файлом
Шаг 2 — Установка MySQL
Мы запустили веб-сервер, и теперь нам нужно установить СУБД, которая может хранить данные вашего сайта и управлять ими. MySQL — популярная СУБД, используемая в средах PHP.
Используйте для получения и установки этого программного обеспечения:
Для подтверждения установки введите , а затем нажмите .
После завершения установки рекомендуется запустить скрипт безопасности, предустановленный в MySQL. Этот скрипт будет удалять некоторые небезопасные настройки по умолчанию и блокировать доступ к системе управления базы данных. Для запуска интерактивного скрипта введите следующую команду:
Скрипт предложит настроить плагин .
Примечание. Эту функцию следует активировать при наличии разумных оснований. Если она активирована, MySQL будет отклонять пароли, не соответствующие определенным критериям, и выводить сообщение об ошибке. Оставить проверку отключенной достаточно безопасно, но для входа в базу данных всегда нужно использовать надежные уникальные пароли.
Выберите для активации или любой другой вариант, чтобы продолжить без активации этой функции.
Если вы ответите утвердительно, вам будет предложено выбрать уровень проверки пароля. Если вы укажете самый высокий уровень , система будет выводить сообщения об ошибке при попытке установки пароля, который не будет содержать цифры, буквы в верхнем и нижнем регистре и специальные символы или будет содержать распространенные словарные слова.
Вне зависимости от того, будете ли вы использовать плагин , ваш сервер предложит вам выбрать и подтвердить пароль для пользователя root в MySQL. Не нужно путать его с системным пользователем root. Пользователь root базы данных — это пользователь с правами администратора, который имеет все права для работы с системой управления базы данных. Хотя в MySQL метод аутентификации пользователя root по умолчанию не требует использования пароля даже при его наличии, задайте надежный пароль для обеспечения дополнительной безопасности. Чуть дальше мы расскажем об этом подробнее.
Если вы включили использование паролей, вы увидите уровень надежности введенного пароля root, и ваш сервер запросит у вас подтверждение дальнейшего использования этого пароля. Если вас устраивает текущий пароль, введите в диалоге для подтверждения:
Для всех остальных вопросов нужно выбирать и нажимать в каждом диалоге. Выбрав эти ответы, вы удалите ряд анонимных пользователей и тестовую базу данных, отключите возможность удаленного входа пользователя root и загрузите новые правила, чтобы внесенные изменения немедленно активировались в MySQL.
Завершив настройку, проверьте возможность входа в консоль MySQL, набрав следующую команду:
В результате будет установлено подключение к серверу MySQL с помощью пользователя root базы данных с правами администратора, который логически выводится в результате использования при запуске данной команды. Результат должен выглядеть следующим образом:
Для выхода из консоли MySQL введите следующую команду:
Обратите внимание, что для подключения под именем пользователя root не требуется вводить пароль, хотя вы и задали его при запуске скрипта. Это происходит, поскольку используемый по умолчанию метод аутентификации для пользователя MySQL с правами администратора — , а не
Хотя это может выглядеть как возможный источник проблем с безопасностью, на самом деле эти действия делают сервер базы данных более защищенным, поскольку единственные пользователи, которые могут выполнять вход в систему с правами доступа root для MySQL — это пользователи системы с привилегиями sudo, подключенные с использованием консоли или через приложение, использующее аналогичные привилегии. На практике это означает, что вы не сможете использовать пользователя root базы данных с правами администратора для подключения из вашего приложения PHP. Настройка пароля учетной записи root MySQL работает как гарантия, если метод аутентификации по умолчанию меняется с на .
Для дополнительной безопасности рекомендуется иметь специальные учетные записи пользователей с менее обширными привилегиями, особенно если вы планируете использовать несколько баз данных на сервере.
Примечание. На момент написания этого руководства родная библиотека MySQL PHP не поддерживает , метод аутентификации MySQL 8 по умолчанию. Поэтому при создании пользователей базы данных для приложений PHP на MySQL 8 вам нужно убедиться, что вместо этого пароля они настроены на использование . Мы расскажем об этом в .
Теперь ваш сервер MySQL установлен и защищен. Далее мы выполним установку PHP, последнего компонента стека LEMP.