Установка Nginx, MySQL, PHP (LEMP) на CentOS 7
Установка веб-сервера LEMP (NGINX + MySQL + PHP-FPM) на CentOS 7.
Шаг 1. Установка Nginx
Добавляем CentOS 7 Nginx репозиторий.
1 | rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm |
Установка Nginx.
1 | yum install nginx |
После установки Nginx - запускаем его.
1 | systemctl start nginx.service |
Проверить, что веб-сервер запущен можно по адресу http://example.com/
Мы увидим дефолтную страницу Nginx.
После проверки успешного запуска, добавим сервис в автозагрузку при старте системы.
1 | systemctl enable nginx.service |
Шаг 2. Установка MySQL (MariaDB)
Теперь, после того как закончена установка веб-сервера, приступаем к установке и настройке сервера баз данных. В данном примере будет использоваться MariaDB, поскольку данный форк зарекомендовал себя с лучшей стороны.
Установка сервера и клиента MariaDB
1 | yum install mariadb-server mariadb |
Запуск сервера баз данных.
1 | systemctl start mariadb |
После того как сервер запущен, приступаем к базовой настройке. Запускаем скрипт настройки простой командой.
1 | mysql_secure_installation |
1 | NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB |
После настройки добавим сервис в автозагрузку.
1 | systemctl enable mariadb.service |
Шаг 3. Установка и настройка PHP (PHP-FPM)
PHP позволяет отображать динамический контент сайта, а также получать информацию из MySQL базы.
Установка PHP
1 | yum install php php-mysql php-fpm |
Прочие компоненты и модули можно установить в зависимости от требований.
Незначительная конфигурация для повышения безопасности
Открываем конфигурационный файл PHP
1 | vi /etc/php.ini |
Нас интересует параметр cgi.fix_pathinfo
. По умолчанию он закомментирован и установлен в значение 1
.
Это значение небезопасно, поскольку любой пользователь будет иметь возможность заливать файлы на сервер (например аватары). Создав особенное изображение, которое будет одновременно проходить валидацию размеров GD и исполняться php интерпретатором, будет иметь права на исполнение произвольного кода на сервере с правами php процесса.
Раскомментируем строчку и изменим значение на 0
.
1 | cgi.fix_pathinfo=0 |
Также это можно сделать через настройки Nginx
1 | location ~* .php$ { |
Теперь доступ для несуществующих файлов с разрешением *.php
закрыт.
Cама реализация cgi.fix_pathinfo
достаточно тормознутая — на каждый запрос проверяется каждый компонент пути — не скрипт ли это.
Поэтому стоит выключать также и из соображений производительности.
Также не забываем изменить временную зону, для этого раскомментируем строчку ;date.timezone =
и впишем необходимую временную зону.
1 | [Date] |
Далее, откроем конфигурационный файл PHP-FPM
1 | vi /etc/php-fpm.d/www.conf |
Находим строчку начинающуюся с listen
и заменяем её полностью новым значением.
1 | listen = /var/run/php-fpm/php-fpm.sock |
Запускаем PHP-FPM
1 | systemctl start php-fpm |
Добавляем PHP-FPM в автозагрузку
1 | systemctl enable php-fpm.service |
Шаг 4. Конфигурация NGINX
После того, как мы завершили установку основных компонентов для успешной работы веб-сервера, приступим к его настройке.
NGINX как и Apache поддерживает работу виртуальных хостов. Создавать файлы с хостами можно в директории /etc/nginx/conf.d/
, но мы будем использовать другую схему.
Создаем директории под виртальные хосты
1 | mkdir /etc/nginx/sites-available |
В файл конфигурации /etc/nginx/nginx.conf
добавляем в конец строчку:
1 | ## Load virtual host conf files. ## |
Вероятно уже стало понятно, что в директории sites-available
будут храниться файлы вирутальных хостов, а в директории sites-enabled
будут симлинки на них, которые будут активны. Таким образом можно всегда просто включить/отключить один из хостов.
Создаем виртуальный хост
Создаем директории под содержимое сайта, а также под логи для каждого из хостов.
1 | mkdir -p /srv/www/example.com/public_html |
Создаем файл example.com
в директории /etc/nginx/sites-available
.
1 | server { |
Подключаем наш виртуальный хост
1 | cd /etc/nginx/sites-enabled/ |
Проверяем работу PHP
Создаем файл в директории сайта /srv/www/example.com/public_html/info.php
1 | phpinfo(); |
Открываем файл в браузере
1 | http://example.com/info.php |
Если все в порядке, то можем наблюдать приблизительно следующее.
Не забываем удалить файл info.php
.
На этом установка LEMP в CentOS 7 завершена.