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 – очень гибкая основа для обслуживания веб-контента, которая позволит разместить практически любой веб-сайт и установить большинство веб-программ.