nginx php fpm php install centos
NGINX на CentOS 7 — установка и настройка
Для получения последней версии NGINX создаем файл с настройками нового репозитория:
И приводим его к следующему виду:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
Обновляем систему и список пакетов:
* если система запросит подтверждение, отвечаем Y.
Устанавливаем NGINX следующей командой:
По умолчанию, в CentOS работает брандмауэр, поэтому необходимо добавить рабочие порты 80 (http) и 443 (https) в правила на исключение:
* в данном примере добавлены порты 80 и 443. Первый используется в NGINX по умолчанию. Если планируется использовать другой, необходимо добавить его. Или наоборот — если не запланирована работа по безопасному протоколу https, можно его не включать.
Теперь добавляем NGINX в автозапуск при загрузке CentOS
systemctl enable nginx
И запускаем веб-сервер:
systemctl start nginx
Для проверки запустите браузер на другом компьютере и введите в адресную строку IP-адрес сервера, который был настроен. Должна загрузиться тестовая страница, наприимер:
NGINX + PHP + PHP-FPM
В чистом виде, веб-сервер NGINX используется редко. Настроим связку с PHP и его обработчиком — PHP-FPM.
Для начала, устанавливаеми тот и другой следующими командами:
yum install php-fpm
Разрешаем автозапуск php-fpm и запускаем его:
systemctl start php-fpm
systemctl enable php-fpm
Настройка NGINX для работы с PHP и PHP-FPM
Открываем настройки сайта по умолчанию:
Редактируем секцию location:
location / <
root /usr/share/nginx/html;
index index.php;
>
* здесь мы поменяли index.html на index.php. Эта настройка позволит автоматически искать и запускать файл index.php, если путь к скрипту не указан явно.
Приводим к следующему виду секцию server:
* где /usr/share/nginx/html — корневой путь по умолчанию для хранения сайта; 9000 — порт, на котором работает php-fpm.
Переименовываем индексный файл для текущего сайта по умолчанию:
mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.php
Отредактируем его (содержимое заменим на это):
🐹 CentOS 7: Установка PHP 7.4 и настройка php-fpm.sock — Fastcgi Process Manager для Nginx.
Опубликовано 2020-09-24 · Обновлено 2021-05-10
Содержание:
1. Введение.
Существует php 5.6, 7.4 или 8. Для каждой версии php существует режим работы, который гораздо важнее для производительности, чем просто версия php.
В apache существует режимы работы php-cgi — это в принципе то же самое что и php-fpm, но есть существенная разница. CGI — тоже оно, но не совсем.
Что такое CGI и чем он отличается от обычного apache по умолчанию?
Apache с mod_php исполняет php-код сам, используя при этом кучу ресурсов сервера и делая это внутри своих процессов.
Когда используется режим CGI — это значит apache не обрабатывает php сам, а запускает php-cgi для каждого php-скрипта и забирает у него результат обработки. То есть это даже несколько усложняет схему: пользователь шлёт запрос к nginx > тот обращается к apache > apache запускает скрипты через CGI и получает результат их выполнения > собирает из них html и отдаёт его nginx > тот собирает статические страницы, нужную для этой html страницы в кучу > отдает пользователю.
Еще существует режим fastcgi — это тот же CGI, но отличается от него тем, что оно позволяет apache не запускать для каждого скрипта отдельный процесс, а запустить один или несколько процессов и отдавать скрипты ему, получать от него ответ. Это немного производительнее, чем CGI, за счёт того, что операции создания процессов для операционной системы считаются довольно ресурсоемкими. в работе этой схемы задействован всё тот же apache. Fastcgi без apache в данном случае работать не может, это все равно модуль mod_fastcgi.
php-fpm — это Fastcgi Process Manager. Он представляет из себя отдельную службу, которая работает независимо от какого-либо web-сервера. Он может сам принимать запросы от web-сервера через unix-сокет или через сетевое соединение. Другими словами, вы можете держать сайты на одном сервере, а php-скрипты исполнять на другом.
Получается, что для nginx помощь apache становится уже не нужна, потому как nginx может работать с php-fpm сам, напрямую. Apache тоже может работать в таком же режиме с php-fpm, но это не имеет смысла. Php-fpm не может отдавать статические файлы или html, он может только исполнять php.
Получается такая схема: запрос пользователя > nginx > php-fpm > nginx, он собирает из ответа php и статики страницу > отдаёт пользователю. FPM в разы производительнее apache, в каком бы режиме тот ни был запущен.
2. Настройка репозиториев.
Установим YUM утилиты:
Для установки репозитория REMI в CentOS 7 требуется установить EPEL репозиторий и выполнить команду:
Нет смысла держать репозитории, которые устарели.
В базовой установке CentOS 7 установлен remi-safe репозиторий. Там содержатся копии только старых-добрых программ, которые не обновляются очень долго в угоду стабильности работы некоторых систем. Так как мы будем ставить новую версию репозитория REMI, то старую версию REMI-SAFE можно смело деактивировать.
Для активации remi надо вначале отключить remi-safe и ius репозиторий (если он у вас включен), а потом активировать remi выполнив команды:
Возможны конфликты с репозиторием IUS! Отключим IUS, если он активирован ранее:
Активируем remi:
Посмотрим какие репозитории появились в доступности у CentOS 7:
Посмотрим доступные репозитории remi:
Получится вот так, если активировать вручную:
Или вот так, если активируем репозиторий remi-php74 автоматизированно, для этого выполняем команду:
3. Установка php 7.4 и php-fpm.sock.
Теперь устанавливаем php версии 7.4.
Установим php-fpm и наиболее популярные модули, которые могут пригодится в процессе эксплуатации web-сервера.
Запускаем php-fpm и добавляем в автозагрузку.
# systemctl start php-fpm
# systemctl enable php-fpm
Проверим активность службы:
# systemctl status php-fpm
Ответ:
Проверяем, запустился ли он.
Перед этим установим сетевые утилиты для CentOS 7:
Вот что он вам покажет до того, как мы переделаем всё под свои нужды.
Все в порядке, повис на порту 9000.
4. Настройка php-fpm.sock.
Теперь переделаем всё под наши нужды. Запустим его через unix сокет.
Создадим резервную копию конфигурационного файла:
# cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.original
Открываем файл конфигурации /etc/php-fpm.d/www.conf :
Ищем и комментируем строку:
Вместо нее, сразу под ней, добавляем несколько других:
Заодно измените пользователя, от которого будет работать php-fpm.
Вместо apache укажите nginx.
Перезапускаем php-fpm, чтобы применить настройки.
# systemctl restart php-fpm
Проверяем, стартовал ли указанный сокет.
Создаем папку session :
Более безопасно было бы для каждого сайта делать отдельную директорию для сессий и определять ее в настройках php, но это уже частный случай. В общем случае, можно оставить так.
Установка Nginx в CentOS 7
Кроме функции веб-сервера, программа может работать в качестве обратного прокси, прокси для TCP/UDP или почты, а также в качестве балансировщика нагрузки. Nginx используется для обеспечения работы огромного количества сайтов в сети интернет, а также известна, как самый высокопроизводительный веб-сервер. В этой статье мы рассмотрим, как выполняется установка Nginx CentOS 7, а также как выполнить первоначальную настройку программы.
Установка Nginx в CentOS 7
Веб-сервер Nginx есть в официальных репозиториях дистрибутива, та версия уже устарела, и если вы хотите получить новую версию с современными возможностями, вам придётся использовать репозиторий EPEL. Для его добавления в систему выполните:
yum install epel-release
Затем можно установить Nginx:
Чтобы запустить сервис Nginx, выполните:
systemctl start nginx
Затем необходимо добавить программу в автозагрузку:
systemctl enable nginx
Далее надо разрешить трафик для веб-сервера в брандмауэре системы:
И перезагрузить брандмауэр:
Если все было сделано правильно, то, открыв адрес сервера, на который вы устанавливали Nginx, вы увидите страницу по умолчанию:
Настройка расположения файлов сайта
Установка Nginx CentOS 7 завершена, теперь будет рассмотрена настройка Nginx. Нам нужно сообщить Nginx, где будут находится файлы нашего сайта. В конфигурационном файле /etc/nginx.conf, уже настроен один виртуальный хост. Его мы и будем использовать. Здесь указана опция default_server, поэтому он будет открываться для всех запросов к Nginx:
Сначала нужно создать само расположение файлов. Создайте папку /var/www/html/default, в которой будут храниться наши файлы сайтов, и дайте на неё права пользователю nginx:
mkdir /var/www/html/default
chown nginx:nginx /var/www/html/default
Также можно создать файл index.html в этой папке для теста веб-сервера с таким текстом:
It words!
Этот файл тоже должен принадлежать пользователю Nginx. Далее в конфигурационном файле /etc/nginx/nginx.conf найдите секцию server и замените значение параметра root на /var/www/html/default:
Теперь Nginx будет брать файлы сайта из этого каталога при всех запросах. Перезапустите Nginx:
systemctl restart nginx
Затем откройте снова адрес сервера в браузере, чтобы посмотреть, работает ли наше расположение файлов. Если всё было сделано правильно, вы увидите сообщение it works:
Если возникает ошибка, убедитесь, что у Nginx есть права для доступа к этому файлу, а также, что SELinux отключён или правильно настроен.
Настройка PHP-FPM Nginx CentOS
Если вам нужен Nginx, то скорее всего, вам нужно также настроить его для работы с интерпретатором PHP. Дальше будет разобрана настройка php-fpm Nginx CentOS 7. Прочитать более подробно про установку PHP 7 в CentOS можно в отдельной статье, а в этой статье мы будем работать с версией, доступной в официальных репозиториях. Для Nginx нам необходимо установить пакет php-fpm:
yum install php-fpm
Затем запустите службу php-fpm командой:
systemctl start php-fpm
Откройте конфигурационный файл php-fpm, который находится по адресу /etc/php-fpm.d/www.conf и посмотрите, на каком порту ожидает соединений запущенная служба. По умолчанию это 9000:
Далее нам осталось только связать Nginx с новой службой. Для этого в секцию server добавьте такой код:
Здесь очень важно значение этого параметра:
Оно должно соответствовать тому, которое мы видели в файле /etc/php-fpm.d/www.conf. Это адрес и порт на котором ожидает подключения служба php-fpm. Всё остальное можно оставить как есть и модифицировать при необходимости. Затем перезагрузите Nginx:
sudo systemctl reload nginx
Опция reload позволяет перечитать конфигурацию без перезагрузки веб-сервера. Осталось создать тестовый файл с таким содержимым:
Затем откройте адрес сервера на который был установлен Nginx плюс phpinfo.php в браузере:
Теперь вы увидите, что php-fpm nginx настроен полностью и корректно работает.
Выводы
В этой статье мы разобрали, как установить Nginx CentOS 7, а также как настроить первый веб-сайт и подключить обработку скриптов с помощью интерпретатора php-fpm. В следующих статьях разберёмся с настройкой виртуальных хостов для Nginx и SSL-сертификатов.
Оцените статью:
Об авторе
Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.
5 комментариев
А зачем php в статье про nginx? мб стоит как то более подробно расписать возможности nginx, например stream проксирование, либо возможность разным сайтам работать под разными пользователями. Подобных этой статей слишком много уже.
Я полчаса потратил на ковыряние конфигов, только после твоего коммента дошло! Сайт нормальный вроде, но авторы косячат иногда!
Подскажите, пожалуйста, какие права должны быть на директорию /home/test, если нужно настроить http сервер так, чтобы он отображал содержимое домашнего каталога пользователя test командой curl localhost или по IP сервера.
Nginx + php-fpm на CentOS 5.3
В этой статье я поделюсь собственным опытом построения веб-сервера, работающего на CentOS 5.3.
Предыстория
В качестве «полигона для испытаний» у меня был в наличии физический сервер, на борту которого стояли 2 процессора Xeon и 2 Гб оперативной памяти. Более точный конфиг привести не могу — не помню, да и особо не волновало.
Для работы сайта требовался php ветки 5.2.х. Когда я устанавливал из стандартного репозитория, я столкнулся с такой проблемой, как libxml. По умолчанию он ставился с версией 2.6.24, что делало проект абсолютно нерабочим (требовалась версия 2.6.32). Даже с подключенным репозиторием CentALT проблема не решалась.
Вероятно, можно было пересобрать готовый пакет и установить уже его, но у меня нет в этом никакого опыта, поэтому php я решил собирать вручную.
Правильно собрать php с первого раза мне, разумеется, не удалось :). Проект требовал учета небольшого количества тонкостей. В частности, это поддержка pdo и freetype.
Изначально я решил сделать все на основе связки nginx+apache, процесс установки и настройки ничем не отличался от того, как написано в этой статье. Да и сам процесс мне казался проще, чем настройка работы с php-cgi.
Все работало прекрасно, но я решил не останавливаться на этом, тем более сервер нужно было оптимизировать. Тут и пришла задумка убрать полностью apache, взвесив все это на nginx и php-cgi.
Сборка PHP
Нужно было еще чем-то управлять самим процессами FastCGI, я решил использовать php-fpm — PHP FastCGI Process Manager — это патч для PHP, позволяющий более эффективно управлять процессами FastCGI для обеспечения высокой стабильности работы. Почему именно он? Показался прост в настройке и вообще по отзывам неплох.
Сказано — сделано, тянем последнюю версию с http://php-fpm.org/downloads/. На тот момент у меня стоял php версии 5.2.10, поэтому я тянул php-5.2.10-fpm-0.5.13.diff.gz. Казалось бы, далее все просто. Стягиваем, и делаем все в точности как указано в вики самого проекта. Кратко приведу что нужно было сделать:
Как видите, ничего хитрого. Далее — я собирал php. Процесс сборки шел с учетом тех тонкостей, которые мне были необходимы:
В первом случае мы задаем где будет лежать pid-файла процесса, во втором куда писать логи.
Адрес и порт где будет слушать php. Это мы и будем использовать при кофигурировании nginx. Либо, тут указывается путь к сокету — например:
И необходимо задать от чьего имени запускать сам процесс:
Это уже на ваше усмотрение, главное, чтобы права были соответствующие.
Можно еще покопать конфиг, каждая строчка снабжена комментарием, разобраться несложно.
Nginx
Как я уже говорил выше, установка и установка nginx практически не отличается от того, что написано в статье, ссылку на которую я указал выше. Единственный момент — мы не используем проксирование, так как apache у нас нет, соответственно строчки proxy_* не имеют для нас никакого значения. Ну и сама специфика настройки, к примеру worker_connections или worker_processes и т.п. зависит конкретно от ваших нужд. Разумеется, я собирал вручную, потому что и тут нужно было учесть некоторые тонкости. Без них было бы вполне достаточно:
Приведу пример части конфига из ветки http:
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log main;
‘»$got» «$sent_http_set_coockie»‘; — это мне требуется для логгирования с установленным модулем custom-nginx-session-module (Модуль для определения куки и установки уникальной сессии). О процессе установки и настройки могу рассказать позже, если кому-то будет интересно. А то, что выше — обычное логгирование.
Еще подразумевалось использование виртуальных хостов, поэтому для удобства я решил вынести это в отдельные файлы:
include /etc/nginx/sites-enabled/*;
Приведу пример — файл /etc/nginx/sites-enabled/example.com:
server <
listen 80;
server_name example.com www.example.com;
# Разумеется, мне нужен лог для каждого виртуального хоста
access_log /var/log/examplecom-access.log;
error_log /var/log/example.com-error.log;
# Указываем корень где будет лежать сайт
root /path/to/www;
# Всю статику отдаем nginx
location
строчки не имеют смысла, если у вас один и тот же root, да и вообще nginx отдаст эти файлы так сказать по дефолту, если вы на них handler не повесите 🙂 имеет смысл поставить expires побольше в этот location и возможно настроить размер буферов для отдачи (если статических файлов действительно много)
# Адрес и порт, который мы указали в конфиге php-fpm.conf
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /path/to/www$fastcgi_script_name;
include fastcgi_params;
>
>
UPD: Или, как подсказал хабраюзер darivush:
Разумеется, это пример стандартного минимального конфига, все остальное вписывается\убирается\редактируется в зависимости от поставленных задач.
Вроде ничего не забыл. Запускаем php-fpm и nginx:
/etc/init.d/php-fpm start
/etc/init.d/nginx start
И тут я столкнулся с проблемой — php у меня не пропатчился как нужно, в итоге php-fpm напрочь отказывался запускаться, ругаясь на неверный параметр при запуске php-cgi. Решение этой проблемы я так и не смог найти на тот момент. Все решилось некоторое время спустя, когда вышла версия php 5.2.11, которую я пропатчил тем же патчем, сконфигурировал и установил так, как описано выше. После чего все запустилось и заработало без проблем.
Так как мне нужно было собирать php вручную (из-за всех тонкостей, о которых я писал выше), то я не пытался решать задачу установкой всего необходимого из стандартных репозиториев. Возможно, это работает и процесс установки становится проще.
Спасибо за внимание. Статью разместил у себя в блоге, потому что ни в коем случае я не претендую на изобретение велосипеда в плане поставленной задачи. Это больше вспомогательный мануал для меня, который может понадобиться в случае необходимости. Ну, и ее окажется вполне достаточно для новичков. Но, если статья покажется вам полезной, с удовольствием перенесу это в блог nginx. В планах — рассказать о настройке custom-nginx-session-module (я позже расскажу зачем он мне нужен), а так же memcached, и pinba.
И да, пожелания, замечания и ценные советы приветствуются.
Nginx + php-fpm на CentOS 7
Установка nginx на CentOS 7
Ставим непосредственно web сервер:
Добавляем в автозагрузку:
Проверяем, запустился ли:
Теперь можно зайти на тестовую страничку, чтобы убедиться, что nginx работает:
Не забудьте открыть 80-й порт на фаерволе.
Установка mysql на CentOS 7
Практически ни один web сервер сейчас не обходится без mysql. В centos 7 вместо mysql устанавливается mariadb, которая имеет полную совместимость с mysql, в том числе понимает все ее команды. Так что ставим на сервер:
Добавляем в автозапуск:
Проверяем, запустилась ли mysql:
Теперь воспользуемся скриптом безопасности, который позволит задать пароль root и произвести некоторые настройки:
Установка php-fpm на CentOS 7
Устанавливаем php-fpm и некоторые модули, которые скорее всего пригодятся в дальнейшей работе:
На все вопросы просто жмем enter, выбирая параметры по-умолчанию.
Теперь отредактируем /etc/php.ini как нам рекомендует инсталлятор:
Задаем параметр cgi.fix_pathinfo=0 и добавляем в конце строку extension=apc.so
Заодно установим сразу же часовой пояс: date.timezone = «Europe/Moscow»
Создадим файл настроек APC:
Добавляем php-fpm в автозагрузку:
Настройка nginx и php-fpm на CentOS 7
Теперь отредактируем конфиги для совместной работы. Приводим конфиг nginx к следующему виду:
Более подробно о том, как выполнить базовую настройку nginx читайте в отдельной обширной статье.
Теперь правим конфиг php-fpm, приводим его к следующему виду:
Создаем необходимые каталоги:
Теперь все готово, можно проверять. Создаем в папке /web/sites/site1.ru/www тестовый файл:
Заходим по адресу: http://site1.ru/ и если наблюдаем информацию о php, то все сделано правильно.
Если нет, то идем в логи и смотрим, в чем ошибка.
Установка phpmyadmin на CentOS 7
Для удобства управления базами веб сайтов я всегда использую phpmyadmin. Установим ее:
Копируем файлы панели в наш виртуальный домен, созданный ранее:
Заходим по адресу http://pma.site1.ru/ и проверяем, все ли в порядке.
У меня при первом запуске в браузере открылся просто белый лист. Начал разбираться в чем дело. В логе ошибок nginx этого виртуального хоста увидел ошибку:
*43 FastCGI sent in stderr: «PHP message: PHP Fatal error: Call to undefined function __() in /web/sites/pma.site1.ru/www/libraries/core.lib.php on line 245» while reading response header from upstream, client: 77.47.234.119, server: pma.site1.ru, request: «GET /index.php HTTP/1.1», upstream: «fastcgi://unix:/var/run/php-fpm/php5-fpm.sock:», host: «pma.site1.ru»
Немного погуглил на эту тему и нашел, в чем причина ошибки. Проблема с директорией для файлов сессий. Чтобы исправить ошибку, создаем эту директорию и выставляем на нее нужные права:
После этого загрузилась панель phpmyadmin:
Более подробную информацию об установке и настройке phpmyadmin смотрите в отдельной статье.
На этом все, настройка nginx + php-fpm на CentOS7 закончена.
Онлайн курс по Kubernetes
Онлайн-курс по Kubernetes – для разработчиков, администраторов, технических лидеров, которые хотят изучить современную платформу для микросервисов Kubernetes. Самый полный русскоязычный курс по очень востребованным и хорошо оплачиваемым навыкам. Курс не для новичков – нужно пройти вступительный тест.
Помогла статья? Подписывайся на telegram канал автора
Автор Zerox
27 комментариев
Добрый день!
Вы тут в пункте «Настройка nginx и php-fpm на CentOS 7» связали nginx и php-fpm но php 5.4
где можно найти связку nginx и php-fpm 7.1?
нашёл ссылку Вашу https://serveradmin.ru/ustanovka-i-nastroyka-nginx-php-fpm-php7-1-na-centos-7/
там установка nginx и php-fpm 7.1 есть но связки не нашёл(а может только их установка хватит)
Zerox, огромное спасибо за статью!
Сможете подсказать, возможно ли настроить и если возможно, то как это сделать)
Есть сервер mysql на Windows 2012 R2, к нему привязано несколько других сервесов. Необходимо использовать его для работы с Сайтом.
Как это настроить?
Если делать по инструкции, то будет использоваться mariadb, что распологается локально.
Буду признателен, если сможете подсказать и/или направить в нужное русло.
Так ничего делать и не надо. Создайте базу на текущем сервере и подключайтесь к ней удаленно. В больших проектах так чаще всего и бывает, что сервер с базой данных это отдельный сервер.