Причины и решения, чтобы сервер сообщал об ошибке nginx 502 Bad Gateway

Что делать, если на странице сайта появляется 502badgateway? Сегодня мы разберем причины и пути решения.

1. Причины nginx 502 Bad Gateway:


Большая часть 502 в nginx это проблема бэкенда, а позже это проблема PHP.В сервисе PHP есть два очень важных параметра: max_requestst и max_children, конкретную причину нужно проверять в логе, чтобы понять!

1: Был ли запущен процесс FastCGI

ps aux|grep php

Проверить, запущен ли сервис php-fpm;

2: недостаточно ли рабочих процессов FastCGI

Запустите линукс-команду:

netstat -anpo | grep «php-cgi» | wc -l

Определить, близок ли он к процессу FastCGI, близок ли к значению, установленному в конфигурационном файле, что указывает на то, что количество рабочих процессов слишком мало;

3. Время выполнения FastCGI слишком велико

Увеличьте следующие значения параметров в соответствии с реальной ситуацией

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

4: Недостаточно буфера FastCGI

Как и у apache, у nginx есть лимит внешнего буфера, и параметры буфера можно настроить.

fastcgi_buffer_size 32 КБ;
fastcgi_buffers 8 32k;

5: другие причины

Слишком много ситуаций, когда возникает 502, (например: текущая конфигурация вашего сервера не может поддерживать ваш существующий бизнес. У меня есть друг, у которого сервер 4-ядерный 8G, и 502 Bad Gateway часто появляется некоторое время, и это нормально некоторое время процессор и память часто заполнены и близки к 100%, а нагрузка тоже близка к 4. Наконец, после обновления конфигурации до 8-ядерного 16G, это становится нормальным.) Это намного больше, чем Что сказал блогер! Можно только сказать, что они наиболее часто используются! По определенным причинам вы должны проверить журнал сервера;

Как разрешить 502 Bad Gateway, просмотрев журналы?

2. Как решить проблему с плохим шлюзом nginx 502?


1: Просмотр журналов nginx

Поскольку это nginx сообщает об ошибке, сначала мы проверим журнал nginx; выполните следующую команду:

vim /fujieace/nginx/logs/error.log

В логе ошибки нет, все в норме, явно проблема не в nginx;

2: Проверьте журнал php

Возможно разные среды, путь может быть другим, но очень похожим, продолжайте выполнять команду linux:

vim /fujieace/php/var/log/php-fpm.log

Оказывается, их много: как показано ниже

ВНИМАНИЕ: сервер [pool www] достиг настройки pm.max_children (5), рассмотрите возможность ее повышения;

Перевод:

ПРЕДУПРЕЖДЕНИЕ: [Пул серверов www достиг настройки pm.max_children] (5), рассмотрите возможность ее повышения

Нам нужно только изменить параметр «pm.max_children»!

проиллюстрировать:

pm.max_children = 30 //Установить максимальное значение дочернего процесса

Пример:

Каждый подпроцесс php-fpm занимает 20 МБ памяти, а память сервера составляет 1 ГБ, не считая памяти, занимаемой другими приложениями в системе.

Если система 300M, а остальные 700M, 700/20 = 35, максимальная настройка 35, а значение может быть чуть ниже до 30.

В то же время нам также необходимо настроить следующие параметры

pm.start_servers = 10 //Количество процессов запуска php-fpm
pm.min_spare_servers = 10 //Минимальное количество простаивающих процессов для динамического php-fpm
pm.max_spare_servers = 24 //Максимальное количество простаивающих процессов для динамического php-fpm
pm.max_requests = 500 //Время перезапуска всех дочерних процессов

Пример:

Время перезапуска всех дочерних процессов — 300 с, параллелизм — 50, а для параметра max_children установлено значение 30;

max_requests = 300*50/30=500;

Если вы хотите, чтобы процесс возрождался каждый час, это 3600*50/30=6000.

Решение:


Измените конкретные шаги параметра pm.max_children:


Если вы используете пакет установки в один клик, выполните следующие действия:

1. Выполните команду vim

vim /usr/local/php/etc/php-fpm.conf
pm.max_children = 5

непосредственно изменены на

pm.max_children = 20

Советы: значение 20 указано только для справки и может увеличиваться.Для получения подробной информации, пожалуйста, установите его в соответствии с конфигурацией вашего сервера; пожалуйста, установите его в соответствии с приведенным выше методом расчета; больше не лучше! Если после настройки не сообщается об ошибке, все в порядке!

Пакет установки lnmp в один клик, если блогер правильно помнит, по умолчанию pm.max_children=10;

2. Сохраните, выйдите и перезапустите php-fpm;

pkill -9 php //убить процесс php./sbin/php-fpm
//перезапустить службу php

Если вы используете исходный код вручную для установки php, измените pm.max_children, и его путь будет другим;

Сайт например:

vim /fujieace/php/etc/php-fpm.d/fujieace.conf

fujieace.conf был переименован мной. Когда вы устанавливаете его, вы изменяете его так, как он выглядит. Модификация по умолчанию — www.conf;

Другие ничем не отличаются, и вышеописанные операции такие же, главное найти конфигурационный файл php-fpm и изменить в нем максимальное количество дочерних процессов;

Guess you like

Origin blog.csdn.net/u011055144/article/details/128596889