2. Nginx и php-fpm на socket в Сentos 7

Теперь нам нужно подключить использование PHP-FPM для обработки запросов к PHP-файлов в Nginx.

При установке Nginx в нашей прошло статье мы уже зашли по http на страницу по умолчанию, мы увидели там надпись «Welcome to nginx!», так же Вы должны были освоить как Nginx обрабатывает входящие соединения.

Теперь давайте сконфигурируем простой сайт на PHP, например у нас есть зарегистрированный домен mysite.org, Вы сконфигурировали в DNS для него запись типа A указывающую на IP адрес Вашего сервера на котором и установлен Nginx, пусть IP адрес будет 195.56.56.10 (в реальности у Вас конечно будет настоящий IP адрес).

Создадим файл виртуального сервера для Nginx, он почти один в один повторяет рекомендованный вариант в документации Nginx. Единственное, что мы в нем добавили свое, это IP адрес (директива listen), имя домена (директива server_name), директория сайта (директива root) и путь до сокета PHP-FPM (директива fastcgi_pass, она соответствует адресу и порту в директиве listen из файла /etc/php-fpm.d/www.conf):

#cat  /etc/nginx/sites-available/www.conf 

server {

    listen      192.168.0.204:80;

    server_name mysite.org www.mysite.org;

    #acces_log /var/log/nginx/mysite.org.acces.log;

    error_log /var/log/nginx/mysite.org.error.log; 

    root        /var/www/html/mysite.org;

     location / {

        index   index.html index.php;

    }

 

    location ~* \.(gif|jpg|png)$ {

        expires 30d;

    }

 # секция location ~ \.php$ {

location ~ \.php$ {

        # Prevent Zero-day exploit

        try_files $uri =404;

        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

        fastcgi_pass    unix:/run/php-fpm/php-fpm.sock;

        fastcgi_index   index.php;   

        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;

        include         /etc/nginx/fastcgi_params;

}

}

 

Далее создадим симлинк на файл /etc/nginx/sites-available/mysite.conf в директории /etc/nginx/sites-enabled 

 Для чего симлинк? Все просто — это удобный способ быстро включать и выключать виртуальные серверы, ведь в файле /etc/nginx/nginx.conf мы прописали такую директиву:

include /etc/nginx/sites-enabled/*;

В соответствии с ней Nginx будет считывать любые конфигурационные файлы в каталоге /etc/nginx/sites-enabled, а там у нас просто симлинки на нужные файлы из /etc/nginx/sites-available. Создаем:

#ln -s /etc/nginx/sites-available/www.conf /etc/nginx/sites-enabled/mysite.conf

Проверим:

# ls -l /etc/nginx/sites-enabled

total 0

lrwxrwxrwx 1 root root 47 Jul 10 15:24 www.conf -> /etc/nginx/sites-available/mysite.conf

Теперь создадим директорию для нашего сайта, то что мы указали в директиве root в файле /etc/nginx/sites-available/mysite.conf:

#mkdir -p /var/www/mysite.org

Создадим простой php-файл:

(cat<<-EOF

<?php

phpinfo();

?>

EOF

)>/var/www/mysite.org/index.php

 

Установим владельца и права на директорию и все файлы в ней. Обратите внимание, что мы устанавливаем владельцем каталога и файлов пользователя nginx и группу nginx, это не просто так. Дело в том, что Nginx у нас запущен с правами пользователя nginx, процесс Nginx должен иметь доступ на чтение в директорию виртуального сервера. Далее, наш единственный PHP-FPM пул www так же запущен от имени пользователя nginx (директива user и group в файле /etc/php-fpm.d/www.conf). В принципе пул PHP-FPM не обязательно должен запускаться из под того же пользователя их под которого работает Nginx, для него может быть создан отдельный пользователь и группа и это самый правильный вариант, но процесс Nginx должны иметь доступ на чтение-запись к unix-сокету (если используется соединение через сокеты) нужного пула PHP-FPM — это важное условие. Но мы пока ограничимся работай пула PHP-FPM от того же пользователя от которого работает Nginx и не будем использовать сокеты, хотя с ними быстрее.

Задаем права и владельца:

#chown -R nginx:nginx /var/www

#chmod -R 775 /var/www

После этого проверяем конфигурацию Nginx:

#nginx -t

Если ошибок нет, то перезагружаем конфигурацию Nginx:

#nginx -s reload

Предполагается, что на нашем сервере межсетевой экран отключен или нет никаких ограничений на подключение извне. Не забудьте в этом убедиться, т.к. в противном случае подключения на 80-й порт могут блокироваться им и мы не сможем открыть наш сайт.

Проверим межсетевой экран (iptables):

#iptables -nvL

Все готово к проверке сайта через web-браузер. Открываем наш сайт mysite.org в браузере, перед Вами должна появиться стандартная страница информации о PHP.

Если у Вас эта страница не появилась, то в зависимости от кода ошибки нужно либо проверять настройки сервера, либо смотреть лог ошибок Nginx.

Если Вы использовали мой файл конфигурации nginx.conf, то лог ошибок Nginx находится в файле /var/log/nginx/error.log

Если у Вас свой файл nginx.conf, то проверьте путь к логу командой:

#cat /etc/nginx/nginx.conf | grep error_log

Если директива error_log не указана в nginx.conf, то ее можно указать непосредственно в файле виртуального сервера для нашего сайта, в файле /etc/nginx/sites-available/mysite.conf, например так:

#error_log /var/log/nginx/mysite_error.log;

После этого не забудьте проверить и перезагрузить конфигурацию Nginx:

#nginx -t && nginx -s reload

Установка php-fpm: 

#yum -y update

yum -y install php-fpm

Настройка PHP-FPM

Первым делом надо открыть файл /etc/php-fpm.d/www.conf и поправить в нем несколько строк:

 #nano /etc/php-fpm.d/www.conf

Ищем строку listen… заменяем ее на:

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

Раскоментируем строки listen. и укажем имя пользователя, с помощью и правами которого будет создан файл сокета, при первом обращении к нему:

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

listen.owner = nginx

listen.group = nginx

listen.mode = 0660

...

#Аналогично устанавливаем пользователя в строках:

 user = nginx

group = nginx

А также укажем путь к директории, где PHP-FPM будет хранить файлы сессии (на самом деле, данными командами мы просто перекрываем конфигурации из файла /etc/php.ini):

php_value = files

php_value = /www/php-fpm-session

Источник: https://tehnikaarenda.ru/pc/nginx-php-fpm-na-centos-7.html

  • Nginx и php-fpm на socket в Сentos 7
  • 0 Kunder som kunne bruge dette svar
Hjalp dette svar dig?

Relaterede artikler

0. Установка и настройка PHP 7.4 на CentOS 7 в связке с Nginx

Тут показана кастомная установка NGINX v1.23 на Centos7 c поддержкой ряда интересных модулей....

1. NGINX и перевод php-fpm74 на unix socket в Сentos 7

Оговорю сразу, что настравивать php-fpm мы будем через unix сокеты (unix://socket). Есть...

3.

Для того, чтобы вышеописанные настройки работали правильно, создадим файл соккета (по идее, он...