Случайные ошибки шлюза 502 с nginx php-fpm и ubuntu
У меня возникла проблема со случайными ошибками шлюза 502 с использованием nginx и php-fpm. В моем случае я обнаружил сценарий, в котором различные параметры error_log php.ini и уровни error_reporting вызывали ошибки случайных 502 шлюзов.
Изменив настройки php.ini error_reporting и error_log, я смог удалить ошибки шлюза 502, но, что еще более важно, я смог увидеть, какие реальные ошибки php были в журнале и исправить их.
Основная проблема заключалась в том, что если "error_reporting был установлен для отображения уведомлений", "error_logging = On", тогда мне нужно было убедиться, что error_log был установлен в допустимый путь, который был доступен для записи на сервер.
// !!! 502 Gateway Error (unhappy server)
error_reporting = E_ALL & E_NOTICE
; error_log = php_errors.log (note this is commented)
// Happy Server, no 502 gateway error
error_reporting = E_ALL & E_NOTICE
error_log = /valid/log/path/and/permissions
// Happy Server, no 502 gateway error
error_reporting = E_CORE_ERROR
; error_log = php_errors.log (note this is commented)
Обратите внимание, что фактические ошибки были уведомлениями php... однако ngingx выбрасывал 502 ошибки шлюза для уведомлений php, связанных с не заданными свойствами.
Также обратите внимание, что 502 ошибки шлюза не запускались при каждом уведомлении php.
Надеюсь, это избавит кого-то от разочарования!
Ответы
Ответ 1
502 ошибки шлюза в Nginx вызваны тем, что php-fpm не имеет достаточного количества процессов и/или тайм-аутов. Регистрация только говорит о том, что является причиной и не является причиной ошибок 502.
Я использую stunnel + haproxy + nginx + php-fpm на 25 серверах. Значения по умолчанию в pfp-fpm очень низки, даже для сервера с умеренной нагрузкой. Настройте дочерние процессы fpm так же, как и с apache mod_php.
Я использую следующее:
pm.max_children = 250
pm.start_servers = 20
pm.min_spare_servers =10
pm.max_spare_servers = 20
pm.max_requests = 1500
Это сервер с 2 ГБ оперативной памяти. Он обслуживает 20-30 ГБ трафика в день без 502
Ответ 2
Я столкнулся с этим на машинах Windows, работающих под управлением iis и php в режиме fastCGI, поэтому это не просто проблема nix.
Преступник также регистрировался php. Вам не нужно устанавливать его в статический каталог, но если вы предоставляете правильные разрешения, он может писать в тот же каталог, в котором находится script. (Может быть очень полезно, если у вас большой и сложный сайт)
Мой сервер настроен таким образом, и я просто добавил правило, чтобы не обслуживать журналы ошибок для публики.
Подводя итог, ПРОВЕРЬТЕ РАЗРЕШЕНИЯ! =)
Ответ 3
У меня есть аналогичная проблема, которая устранена путем отключения предупреждений PHP, однако, я думаю, что проблема связана с конфигурацией буферов NGINX, используемой журналом ошибок. Ошибка запускается только после того, как определенное количество предупреждающих сообщений поставлено в очередь, и, кажется, вполне прогнозируемо повторяемо; но я не могу понять, какие настройки задействованы, поэтому отключите предупреждения до тех пор, пока я не смогу решить неисправные параметры.
Ответ 4
Если приведенные выше шаги не помогут вам решить проблему, проверьте, включен ли eaccelerator.
Отключите его глобально, отключив запись загрузки .so либо в php.ini, либо в php.d/eaccelerator.ini
Все проблемы исчезли. Похоже, что accellerator терпит неудачу в определенных ситуациях в сочетании с php-fpm.