Теперь нам нужно подключить использование 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