Гид по технологиям

Установка и настройка PHP5 с nginx и PHP-FPM

• 5 min read • Серверы • Обновлено 23 Nov 2025
PHP5 с nginx и PHP-FPM — установка и настройка
PHP5 с nginx и PHP-FPM — установка и настройка

Краткое содержание

  • Установка PHP5 и необходимых модулей
  • Установка APC через PECL
  • Настройка /etc/php.ini (cgi.fix_pathinfo, date.timezone, extension)
  • Запуск и автозапуск php-fpm
  • Конфигурация nginx для передачи PHP на PHP-FPM (TCP и Unix-сокет)
  • Проверка через phpinfo() и отладочные советы
  • Дополнительные рекомендации по безопасности, чек-лист и мини-методология миграции

1 Установка PHP5

Мы используем PHP-FPM (FastCGI Process Manager) для работы PHP5 с nginx. PHP-FPM — это реализация PHP FastCGI с дополнениями, полезными для сайтов любого размера, особенно нагруженных.

Установите php-fpm вместе с php-cli и распространёнными модулями PHP (например, для работы с MySQL) командой:

yum install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-mbstring php-xml php-xmlrpc php-mbstring php-snmp php-soap

Важно: пакеты могут называться иначе в новой версии дистрибутива. Если команда не находит пакет, проверьте репозитории и имена пакетов для вашей версии CentOS/Red Hat.

2 Установка APC (opcode-кеш)

APC — свободный PHP opcode-кешер. Он ускоряет выполнение PHP-скриптов, сокращая время компиляции кода. Альтернативы: Opcache (в современных версиях PHP встроен), Xcache, eAccelerator.

Для установки APC через PECL нужны инструменты разработки CentOS. Установите их так:

yum install php-devel
yum groupinstall 'Development Tools'

Затем соберите и установите APC:

pecl install apc

Пример интерактивного вывода установки (с пояснениями):

[root@example ~]# pecl install apc
downloading APC-3.1.13.tgz ...
Starting to download APC-3.1.13.tgz (171,591 bytes)
.................done: 171,591 bytes
55 source files, building
running: phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
Enable internal debugging in APC [no] : <-- ENTER
Enable per request file info about files used from the APC cache [no] : <-- ENTER
Enable spin locks (EXPERIMENTAL) [no] : <-- ENTER
Enable memory protection (EXPERIMENTAL) [no] : <-- ENTER
Enable pthread mutexes (default) [no] : <-- ENTER
Enable pthread read/write locks (EXPERIMENTAL) [yes] : <-- ENTER
building in /var/tmp/pear-build-rootVrjsuq/APC-3.1.13
......

После успешной установки добавьте в конец /etc/php.ini строку:

extension=apc.so

И перезапустите php-fpm.

3 Настройка /etc/php.ini

Откройте файл конфигурации PHP:

vi /etc/php.ini
  1. Отключите cgi.fix_pathinfo — это важная мера безопасности. Найдите и установите:
cgi.fix_pathinfo=0

Почему: значение по умолчанию может позволять передавать неконтролируемые запросы в интерпретатор PHP, что открывает риск Remote Code Execution при наличии уязвимости.

Важно: после изменения перезапустите php-fpm.

  1. Установите часовой пояс, чтобы убрать предупреждения и корректно работать с функциями даты/времени. Пример:
[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Europe/Berlin"

Замените “Europe/Berlin” на значение для вашей системы. Узнать текущее значение можно так:

cat /etc/sysconfig/clock

[root@server1 nginx]# cat /etc/sysconfig/clock
ZONE="Europe/Berlin"
[root@server1 nginx]#
  1. Убедитесь, что строка для загрузки модуля APC присутствует (extension=apc.so).

4 Запуск php-fpm и автозапуск

Создайте системные ссылки и запустите сервис:

systemctl enable php-fpm.service
systemctl start php-fpm.service

PHP-FPM запускает демон, который по умолчанию слушает FastCGI на 127.0.0.1:9000 (TCP) или на Unix-сокете (если вы настроите его так).

5 Конфигурация nginx

Файл конфигурации nginx находится в /etc/nginx/nginx.conf. Откройте его:

vi /etc/nginx/nginx.conf

Вы можете увеличить число worker-процессов и уменьшить keepalive_timeout для повышения производительности, например:

worker_processes  4;
    keepalive_timeout  2;

Виртуальные хосты находятся в /etc/nginx/conf.d и задаются блоками server {}. Отредактируйте default.conf:

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

Пример конфигурации для обработки PHP через FastCGI (сохраните и включите этот блок):

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        root           /usr/share/nginx/html;
        try_files $uri =404;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}

Ключевые моменты:

  • Добавьте try_files $uri =404; чтобы не передавать nginx неконтролируемые пути в PHP. Это снижает риск атак.
  • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; гарантирует корректный путь к файлу для PHP.
  • Если хотите, укажите servername ; чтобы сделать виртуальный хост «catch-all».

После правок перезапустите nginx:

systemctl restart nginx.service

6 Проверка работы через phpinfo()

Создайте файл /usr/share/nginx/html/info.php с содержимым:

Откройте в браузере http://<ваш-IP>/info.php (пример: http://192.168.1.105/info.php).

Вывод phpinfo() в браузере — строка Server API показывает FPM/FastCGI

На странице phpinfo убедитесь, что Server API показывает FPM/FastCGI и что нужные модули, например MySQL, загружены:

Список загруженных модулей PHP, включая MySQL

Если страница не отображается, проверьте логи nginx (/var/log/nginx/error.log) и логи php-fpm (/var/log/php-fpm/www-error.log).

7 Перевод PHP-FPM на Unix-сокет (опционально)

Unix-сокет снижает накладные TCP-расходы и может дать небольшое улучшение производительности.

Откройте конфигурацию пула php-fpm (пример):

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

Измените строку listen так:

;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/php5-fpm.sock

Перезапустите php-fpm:

systemctl restart php-fpm.service

В nginx поменяйте fastcgi_pass на путь к сокету. В примере ниже используется /var/run/php-fpm/php5-fpm.sock:

vi /etc/nginx/conf.d/default.conf
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        try_files $uri =404;
        fastcgi_pass   unix:/var/run/php-fpm/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

Перезапустите nginx:

systemctl restart nginx.service

Примечание: убедитесь, что права доступа к сокету позволяют nginx подключаться. Если nginx запускается от пользователя nginx, установите owner/group и права в www.conf (listen.owner/listen.group/listen.mode) или настройте systemd/SELinux соответствующим образом.

8 Дополнительно: безопасность и отладка

Important: всегда отключайте отображение подробных ошибок на продакшн-серверах. phpinfo() и display_errors = On оставляйте только в контролируемой среде.

Рекомендации безопасности:

  • cgi.fix_pathinfo=0 — обязательно.
  • Ограничьте доступ к info.php и файлам с отладочной информацией.
  • Настройте права на сокет и директории: обычно nginx должен иметь доступ к сокету php-fpm.
  • Рассмотрите включение OPCache (вместо APC для современных версий PHP).
  • Если используется SELinux, проверьте boolean-переменные и контексты для nginx и php-fpm (отключать SELinux не рекомендуется; вместо этого настраивайте контексты).

Отладка:

  • tail -f /var/log/nginx/error.log
  • tail -f /var/log/php-fpm/www-error.log
  • systemctl status php-fpm.service
  • ss -ltnp | grep 9000 или ls -l /var/run/php-fpm/*.sock

9 Мини-методология миграции (шаги)

  1. Установите php-fpm и модули в тестовом окружении.
  2. Проверьте рабочую версию PHP и совместимость кода.
  3. Включите cgi.fix_pathinfo=0 и настройте date.timezone.
  4. Настройте nginx с try_files и корректными fastcgi_param.
  5. Переключитесь на Unix-сокет при необходимости и проверьте права.
  6. Выполните нагрузочное тестирование и мониторинг.
  7. Разверните изменения на продакшн поэтапно.

10 Чек-лист для администратора

  • Установлены php-fpm и требуемые модули.
  • Установлен opcode-кеш (Opcache/APC) или план по его включению.
  • cgi.fix_pathinfo=0 в /etc/php.ini.
  • date.timezone настроен.
  • fastcgi_param SCRIPT_FILENAME корректен во всех vhost.
  • try_files $uri =404 включён для PHP-локации.
  • php-fpm запущен и включён в автозапуск.
  • Если используется сокет — права и SELinux контексты проверены.
  • Инструменты мониторинга и логирования настроены.

11 Когда это не подходит

  • Если у вас современный PHP 7/8, используйте встроенный Opcache, а пакеты и конфигурации будут отличаться.
  • Для очень высоконагруженных систем рассматривайте пулл-процессы и тонкую настройку pm.* в php-fpm.
  • Если вы используете многосерверную архитектуру с выделёнными PHP-фермами, настройка через TCP может быть предпочтительнее Unix-сокета.

12 Глоссарий (1‑строчные определения)

  • PHP-FPM: менеджер процессов PHP, реализующий FastCGI для лучшей стабильности и управления пулами.
  • FastCGI: протокол обмена между веб-сервером и внешним процессом для обработки динамики.
  • Opcode-cache: кеш скомпилированных PHP-операций для ускорения выполнения.

13 Ссылки

Итог: следуя шагам в этой статье, вы получите надёжную связку nginx + PHP-FPM с минимальным риском уязвимостей и корректной настройкой окружения. Проверяйте логи и права доступа при переключении на Unix-сокеты.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро