Установка и настройка nginx + PHP7 FPM + Mysql на CentOS 7


В погоне за скоростью и с целью экономии ресурсов настроем веб-сервер в конфигурации Linux + NGINX + PHP7 (PHP-FPM + MYSQL (MariaDB) или просто LEMP.

Данная связка ПО становится все популярнее. Потому, что это наиболее удачный вариант для проектов, которые ограничены мощностью своего сервера. Эта связка требует меньше всего ресурсов для своей работы и при этом показывает хорошие результаты быстродействия.

И так для начала устанавливаем CetnOS 7 в конфигурации Minimal и после можно приступить к установке и настройке нашего набора ПО для бeдующего веб-сервера

Установка NGINX

Установка NGINX очень проста достаточно выполнить команду yum install nginx, только предварительно надо добавить официальный репозитарий выполнив две команды:

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

Или добавить репозитарий ручками, создав файл /etc/yum.repos.d/nginx.repo с содержанием:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/$OS/$OSRELEASE/$basearch/
gpgcheck=0
enabled=1

Где $OS — операционная система (rhel или centos), а $OSRELEASE — версия (6 или 7)

После добавления репозитария уже можно установить пакет NGINX и добавить его в автозагрузку:

yum install nginx -y
systemctl enable nginx

Установка PHP-FPM

Поскольку на момент написания в официальном репозитарии CentOS 7 отсутсвует пакеты PHP 7 то подключим неофициальный репозитарий IUS.

cd ~
curl 'https://setup.ius.io/' -o setup-ius.sh

Выполните скрипт командой:

bash setup-ius.sh

Далее устанавливаем PHP 7 и модули php-fpm, php-mysqlnd:

yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd -y

Добавим PHP-FPM в автозагрузку

systemctl enable php-fpm

Настройка PHP 7 для работы с Nginx

Как только у ас установился минимальный набор php 7 , можно приступить к непосредственной настройке связки PHP-FPM + Nginx. Что бы получить лучшее быстродействие желательно использовать Unix-сокет.

И так для начала откроем файл в редакторе и внесем изменения:

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

В нем нам необходимо закомментировать строку listen = 127.0.0.1:9000 которая отвечает за работу на 9000 порту , и раскомментировать listen = /run/php-fpm/www.sock.
Как показано ниже:

;listen = 127.0.0.1:9000
; WARNING: If you switch to a unix socket, you have to grant your webserver user
;          access to that socket by setting listen.acl_users to the webserver user.
listen = /run/php-fpm/www.sock

Затем найдите блок listen.acl_users и раскомментируйте в нем строку listen.acl_users = nginx.

; When set, listen.owner and listen.group are ignored
;listen.acl_users = apache,nginx
;listen.acl_users = apache
listen.acl_users = nginx
;listen.acl_groups =

Далее необходимо изменить конфигурацию NGINX, что бы веб-сервер использовал сокет для взаимодействия с PHP-FRM:

vi /etc/nginx/conf.d/php-fpm.conf

Переключаем способ взаимодействия с TCP-порта 9000 на использование сокета, как показано ниже:

upstream php-fpm {
        #server 127.0.0.1:9000;
        server unix:/run/php-fpm/www.sock;
}

Настроем хост по умолчанию что бы в последствии убедится что у нас все работает:

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

Вариант конфигурации для проверки:

server {
    listen 80 default_server;

    root /usr/share/nginx/html;
    index index.php index.html;

    server_name _;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~ \.php$ {
      try_files $uri =404;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass php-fpm;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
    }

}

Что бы все наши изменения вступили в силу перезапускаем PHP-FPM и Nginx:

systemctl restart php-fpm
systemctl restart nginx

Проверка работы PHP 7

Поскольку все установили и вроде как настроили то неплохо и убедится что все работает.

Для начала выполним команду:

php -v

Ответ которого мы ждем :

PHP 7.0.6 (cli) (built: Apr 29 2016 11:46:41) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

Теперь можно создать в корневом каталоге веб-сервера файл info.php для проверки работы самого серврера:

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

С содержимым:

<?php
     phpinfo();
?>

И теперь если все правильно установили и настроили то открыв в браузере http://ip-адрес-вашего-сервера/info.php мы должны увидеть информацию о конфигурации php.

phpinfo7

 

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

Установка MariaDB (mysql)

В общем установка MariaDB тоже сводится к выполнению нескольких команд:

yum install mariadb-server mariadb-client -y

Добавляем mariadb в автозагрузку:

systemctl enable mariadb.service

В случае если пакет не нашелся добавим репозитарий MariaDB создав файл /etc/yum.repos.d/MariaDB.repo с содержанием:

[mariadb]
name = MariaDB-5.5.39
baseurl=https://downloads.mariadb.com/files/MariaDB/mariadb-5.5.39/yum/rhel6-amd64/
# alternative: baseurl=http://archive.mariadb.org/mariadb-5.5.39/yum/rhel6-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
#CentOS #nginx #php

Copyright © 2013-2017