Подтвердить что ты не робот

Случайные ошибки шлюза 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.

Надеюсь, это избавит кого-то от разочарования!

4b9b3361

Ответ 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.