Как и обещал, решение тестовой задачи с заменой Apache на Nginx. Про Apache писал тут . Теперь сделаем тоже самое с помощью Nginx и забегая вперед сразу скажу — а не все так просто...
Первым делом ставим Nginx
1 2 3 4 | dnf -y install nginx firewall-cmd --add-service=http firewall-cmd --runtime-to-permanent systemctl enable --now nginx |
Можно ничего не исправлять в конфиге, просто запустить nginx и проверить что отдаст браузер.
Дальше ставим две версии php все как в статье про lamp — один в один, репозиторий и версию 7.4 затем 8.4. Запускаем обе версии и проверяем статус. Создаем такие же два файла 7.php и 8.php только в другой директории — /usr/share/nginx/html/
Теперь в конфиг nginx нужно добавить блок для обработки php, примерно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | location ~* 8.php$ { try_files $uri =404; fastcgi_pass unix:/var/opt/remi/php84/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* 7.php$ { try_files $uri =404; fastcgi_pass unix:/var/opt/remi/php74/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } |
Пробуем открыть в браузере один из наших файлов и получаем пятисотую ошибку, а в логах nginx будет что-то вроде
1 | connect() to unix:/var/opt/remi/php84/run/php-fpm/www.sock failed (13: Permission denied) |
Все потому, что в конфигах все заточено под апач... Если посмотреть процессы php:
видно что основной процесс запущен от root а pool www от apache. Нужно поменять это на nginx. Редактируем файлы /etc/opt/remi/php74/php-fpm.d/www.conf и /etc/opt/remi/php84/php-fpm.d/www.conf меняем user = apache на user = nginx, group = apache на group = nginx. Затем расскоментируем строки listen.owner, listen.group и listen.mode. listen.owner и listen.group тоже заменим на nginx. Получится вот так:
Это будет одинаково в конфиг файлах обоих версий php. Но еще беда в том, что сокет создается от root — нужно тоже переделать на nginx.
Редактируем файлы /usr/lib/systemd/system/php84-php-fpm.service и /usr/lib/systemd/system/php74-php-fpm.service. В блок Service добавляем строку User=nginx, сохраняем. Перечитываем конфиги и перезапускаем php-fpm
Получилось как надо. Но при перезапуске php-fpm может вывалиться ошибка про Permission denied — папки php-fpm принадлежат либо root либо apache — нужно поменять их на nginx
1 2 3 4 | chown -R nginx:root /var/opt/remi/php84/log/php-fpm/ chown -R nginx:root /var/opt/remi/php84/run/php-fpm/ chown -R nginx:root /var/opt/remi/php74/run/php-fpm/ chown -R nginx:root /var/opt/remi/php74/log/php-fpm/ |
Вот теперь все красиво и все работает!
З.Ы. Вишенка на тортике. Прочитал логи и доки — если сервис запускаем не от root — все эти директивы про пользователя и группу в файле /etc/opt/remi/php74/php-fpm.d/www.conf игнорируются. Закоментировал, перезапустил — все так и есть.
Удалять уже не стал из статьи, эта информация не помешает.
Всем добра.