Установка LEMP stack (Linux, Nginx, MySQL, PHP) на CentOS 7

LEMP stack – это группа программного обеспечения с открытым исходным кодом, которая, как правило, используется для размещения на сервере динамических сайтов и веб-приложений. Название группы является акронимом, который расшифровывается как Linux (операционная система), Nginx (веб-сервер, который используется вместо Apache (LAMP stack) и читается как ENginx), MySQL (система управления базами данных, необходимая для хранения информации сайта/приложения) и PHP (серверный язык сценариев для быстрого создания и обслуживания динамического контента).

В данном руководстве речь пойдет об установке LEMP stack на виртуальный выделенный сервер CentOS 7 (следовательно, первый компонент группы, операционная система Linux, уже установлен).

Требования

Прежде чем следовать руководству, создайте отдельную учетную запись пользователя (не root) с повышенными привилегиями. Чтобы получить инструкции по созданию такого пользователя, читайте руководство «Начальная настройка сервера CentOS 7».

1: Установка Nginx

Для отображения веб-страниц посетителям сайта можно использовать Nginx – современный и продуктивный веб-сервер.

Чтобы добавить yum-репозиторий Nginx для CentOS 7, откройте терминал и используйте команду:

sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

Поскольку команда начинается с sudo, она будет выполнена с привилегиями root. При ее выполнении будет запрошен пароль текущего пользователя, чтобы подтвердить наличие соответствующих привилегий. Когда репозиторий Nginx установлен, можно приступать к установке веб-сервера (для этого используйте yum):

sudo yum install nginx

Готово! Веб-сервер Nginx установлен.

После установки нужно запустить Nginx на виртуальном выделенном сервере:

sudo systemctl start nginx.service

На данном этапе можно выполнить выборочную проверку, чтобы убедиться, что установка и запуск прошли должным образом; для этого посетите общественный IP-адрес сервера в веб-браузере (чтобы узнать общественный IP, см. следующий раздел):

http://домен_или_IP_адрес_сервера/

Это откроет веб-страницу Nginx для CentOS 7, которая не только позволяет протестировать работу Nginx, но и предоставляет некоторую полезную информацию. Если такая страница появилась, значит, все работает как надо.

Прежде чем перейти к установке следующего компонента, активируйте автоматическую загрузку Nginx (при запуске сервера). Для этого используйте команду:

sudo systemctl enable nginx.service

Как узнать общественный IP-адрес сервера?

Существует несколько способов узнать общественный IP (как правило, это адрес, используемый для подключения к серверу через SSH).

Его можно узнать при помощи командной строки. Во-первых, можно использовать iproute2, введя:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Это вернет одну-две строки. Оба эти адреса правильные, но компьютер использует только один из них, потому просто попробуйте ввести каждый из них.

Альтернативный метод заключается в использовании внешнего абонента, который расскажет, как именно он видит данный сервер. Для этого запросите свой  IP-адрес у определенного сервера:

curl http://icanhazip.com

2: Установка MySQL (MariaDB)

Теперь, когда у веб-сервер установлен и запущен, пришло время установить MariaDB (альтернатива  MySQL). MariaDB – это ответвление реляционной системы управления базами данных MySQL, разработанное сообществом. В основном, эта СУБД используется для систематизации и хранения баз данных, в которых  будет находиться информация сайта.

Опять же, для установки программы будет использоваться yum . На этот раз нужно также установить некоторые вспомогательные пакеты, которые помогут компонентам взаимодействовать.

sudo yum install mariadb-server mariadb

По завершении установки нужно запустить MariaDB при помощи следующей команды:

sudo systemctl start mariadb

Теперь, когда база данных MySQL запущена, запустите простой скрипт безопасной установки, который удалит опасные настройки по умолчанию и заблокирует доступ к системе баз данных. Итак, запустите интерактивный сценарий:

sudo mysql_secure_installation

Будет запрошен текущий root-пароль. Поскольку система MySQL только что установлена, такого пароля, скорее всего, еще нет, потому просто нажмите enter (это оставит поле незаполненным). После этого появится предложение установить root-пароль. Чтобы продолжить, нажмите Y и следуйте инструкциям:

Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
... Success!

На все остальные вопросы можно просто нажать Enter, чтобы принять значения по умолчанию. Это удалит некоторые образцы пользователей и баз данных, отключит удаленный root-логин, а также активирует внесенные в настройки изменения.

Осталось только настроить автоматический запуск MariaDB при загрузке сервера. Для этого используйте:

sudo systemctl enable mariadb.service

Готово! Система баз данных установлена и настроена.

3: Установка PHP

PHP – это компонент установки LEMP, который будет обрабатывать код для отображения динамического контента. Он может запускать скрипты, подключаться к базам данных MySQL для получения информации, а также передавать обработанный контент на веб-сервер.

Для установки PHP снова используйте yum. Кроме того, в команду нужно включить пакеты php-mysql и php-fpm:

sudo yum install php php-mysql php-fpm

Настройка PHP

Теперь все компоненты LEMP установлены; тем не менее, нужно внести небольшие изменения в конфигурации, чтобы повысить уровень безопасности программ.

Откройте конфигурационный файл php-fpm с привилегиями root:

sudo vi /etc/php.ini

В данном файле нужно найти параметр cgi.fix_pathinfo. Она закомментирован (при помощи символа «;») и имеет значение 1 по умолчанию.

Этот параметр очень опасен, поскольку он говорит PHP изменять путь и пытаться запустить ближайший PHP-файлу файл. Это позволяет пользователям создавать PHP-запросы для запуска нежелательных или опасных скриптов.

Данный параметр нужно раскомментировать и установить ему значение 0:

cgi.fix_pathinfo=0

Сохраните и закройте файл.

Затем откройте конфигурационный файл php-fpm, который называется www.conf:

sudo vi /etc/php-fpm.d/www.conf

Найдите параметр listen и измените его значение следующим образом:

listen = /var/run/php-fpm/php-fpm.sock

Сохраните и закройте файл.

Теперь запустите PHP:

sudo systemctl start php-fpm

Эта строка активирует внесенные изменения.

Далее нужно активировать автоматический запуск php-fpm:

sudo systemctl enable php-fpm.service

4: Настройка Nginx

На данном этапе нужно настроить Nginx, чтобы веб-сервер мог обрабатывать страницы PHP. Единственное изменение, которое нужно внести в конфигурации, – это сказать Nginx использовать PHP для динамического контента.

Для этого нужно использовать блок server (блоки server – то же самое, что и виртуальные хосты в Apache). Откройте конфигурационный файл server-блока Nginx по умолчанию:

sudo vi /etc/nginx/conf.d/default.conf

На данный момент (раскомментированный) блок server по умолчанию выглядит так:

server {
listen       80;
server_name  localhost;
location / {
root   /usr/share/nginx/html;
index  index.html index.htm;
}
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   /usr/share/nginx/html;
}
}

В данный файл нужно внести некоторые изменения:

  • Во-первых, нужно сделать опцию index.php первым значением директивы index, чтобы обслуживать индексные файлы PHP при запросе каталога.
  • Кроме того, нужно отредактировать директиву server_name, указав доменное имя или IP сервера.
  • Данный конфигурационный файл включает в себя несколько закомментированных строк, которые определяют процедуры обработки ошибок. Их нужно раскомментировать, чтобы активировать эти функции.
  • Также нужно раскомментировать часть другого раздела, отвечающего за обработку PHP. Кроме того, нужно добавить директиву try_files, чтобы веб-сервер Nginx не пропускал подозрительные запросы на PHP.

В следующем блоке кода все вышеописанные изменения выделены красным:

server {
listen       80;
server_name  домен_или_IP_сервера;
root   /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Внеся все необходимые изменения, сохраните и закройте файл.

Чтобы активировать новые параметры, перезапустите Nginx:

sudo systemctl restart nginx

5: Тестирование PHP

Чтобы протестировать новые настройки и работу PHP, можно создать базовый PHP-скрипт.

Такой скрипт называется info.php. Чтобы Nginx мог найти и обработать этот файл, его нужно сохранить в определенном каталоге – root-каталоге сайта, или web root. В системе CentOS 7 такой каталог находится в /usr/share/nginx/html/. Чтобы создать в нем файл, наберите:

sudo vi /usr/share/nginx/html/info.php

Это откроет пустой файл, в который нужно внести следующий текст (PHP-код):

<?php phpinfo(); ?>

Затем сохраните изменения и закройте файл.

Теперь можно проверить, правильно ли веб-сервер отображает контент, сгенерированный скриптом PHP. Для этого нужно посетить эту страницу в веб-браузере (при этом снова понадобится общественный IP-адрес сервера):

http://IP_адрес_сервера/info.php

Появится страница, которая предоставляет информацию о сервере с  точки зрения PHP. Она полезна при отладке системы, а также для тестирования настроек.

Если такая страница появилась – PHP работает должным образом.

Выполнив проверку, эту страницу необходимо удалить, поскольку она предоставляет информацию о сервере неавторизованным пользователям, что может привести к взлому сервера. При необходимости ее можно создать снова. Чтобы удалить страницу, наберите:

sudo rm /usr/share/nginx/html/info.php

Итоги

Теперь на сервер установлена группа программ LEMP stack – очень гибкая основа для обслуживания веб-контента, которая позволит разместить практически любой веб-сайт и установить большинство веб-программ.

Tags: , , , , , , ,

Добавить комментарий