После обновления Ubuntu до 24.04 сайты отдают Gateway Timeout: остатки PHP из стороннего репозитория, устаревшие библиотеки и лишний модуль Apache

Что было. Обновление с 22.04 (PHP 8.1) на 24.04 (PHP 8.3). После него Apache на любой PHP-страницу отвечает Gateway Timeout: The gateway did not receive a timely response from the upstream server. Статика открывается.

Причины. «Gateway» здесь это связка Apache → PHP-FPM через proxy_fcgi: Apache ждал ответа от пула FPM, которого не было. Разбор показал три наслоившихся проблемы:

  1. PHP годами ставился из стороннего PPA; обновление выпуска оставило пакеты из PPA (8.1 и промежуточные) рядом с системным 8.3, конфигурация proxy_fcgi указывала на сокет пула, который больше не запускался.
  2. Устаревшие библиотеки (libssl1.0.2, libssl1.1) из старых репозиториев остались в системе и мешали зависимостям.
  3. Модуль libapache2-mod-vhost-ldap делал LDAP-запросы при каждом запросе и висел на таймауте.
    Автор выполнил ppa-purge ppa:ondrej/php, удалил устаревшие пакеты (apt purge '~o' для пакетов без источника и '~c' для остатков конфигураций), отключил лишний модуль; PHP заработал, приложения подключились к базам. Подтверждено.

Порядок разбора Gateway Timeout у Apache + FPM.

  1. systemctl status 'php*-fpm': какие пулы запущены; ls /run/php/: какие сокеты существуют.
  2. grep -r 'proxy:unix' /etc/apache2/conf-enabled /etc/apache2/sites-enabled: на какой сокет ссылается Apache. Несовпадение версии в пути (php8.1-fpm.sock при работающем 8.3) и есть причина. a2disconf php8.1-fpm && a2enconf php8.3-fpm.
  3. journalctl -u php8.3-fpm: не падает ли пул при старте (расширения от другой версии, pm.max_children и права на сокет).
  4. apachectl -M: лишние модули, особенно с внешними зависимостями (LDAP, аутентификация во внешних службах).
  5. Только потом таймауты (ProxyTimeout, request_terminate_timeout), если FPM жив, но медленный.

Как обновляться, когда PHP из стороннего репозитория.

  • До обновления выпуска ppa-purge возвращает пакеты на версии дистрибутива; после обновления при желании PPA подключается заново под новый выпуск.
  • Инвентаризация: apt list --installed | grep -E 'php|libssl', apt-cache policy | grep -B1 'o=LP-PPA'.
  • После обновления: apt purge '~o' (осиротевшие) и apt autoremove; проверить dpkg -l | grep '^rc' (остатки конфигураций).
  • Один способ поставки PHP на сервере: либо дистрибутив, либо репозиторий проекта, не оба.

Про модули Apache. Каждый включённый модуль работает на каждый запрос. Проверять список после обновлений и отключать то, чем не пользуются: a2dismod.

Обновление выпуска описано в документации Ubuntu Server.