Что было. Обновление с 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, которого не было. Разбор показал три наслоившихся проблемы:
- PHP годами ставился из стороннего PPA; обновление выпуска оставило пакеты из PPA (8.1 и промежуточные) рядом с системным 8.3, конфигурация
proxy_fcgiуказывала на сокет пула, который больше не запускался. - Устаревшие библиотеки (
libssl1.0.2,libssl1.1) из старых репозиториев остались в системе и мешали зависимостям. - Модуль
libapache2-mod-vhost-ldapделал LDAP-запросы при каждом запросе и висел на таймауте.
Автор выполнилppa-purge ppa:ondrej/php, удалил устаревшие пакеты (apt purge '~o'для пакетов без источника и'~c'для остатков конфигураций), отключил лишний модуль; PHP заработал, приложения подключились к базам. Подтверждено.
Порядок разбора Gateway Timeout у Apache + FPM.
systemctl status 'php*-fpm': какие пулы запущены;ls /run/php/: какие сокеты существуют.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.journalctl -u php8.3-fpm: не падает ли пул при старте (расширения от другой версии,pm.max_childrenи права на сокет).apachectl -M: лишние модули, особенно с внешними зависимостями (LDAP, аутентификация во внешних службах).- Только потом таймауты (
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.