It-e.RU
Цифровой двигатель вашего бизнеса.

NGINX: 502 ошибка

NGINX: 502 ошибка

В путешествиях по сети неоднократно можно наткнуться на безапелляционное "502 bad gateway". Разберемся что же это и как это ремонтировать.


В путешествиях по сети неоднократно можно наткнуться на безапелляционное 502 bad gateway . Разберемся что же это и как это ремонтировать.

Причин возникновения ошибки с кодом 502 или "bad gateway" может быть несколько:

  • Nginx работает как прокси для другого веб-сервера (чаще всего для Apache web server)
  • Nginx работает с PHP-FPM
  • Nginx работает с другим сервисом как прокси
  • Некорректные значения buffer или timeout.

То есть ошибка с кодом 502 возникает в случае недоступности проксируемого сервиса для nginx в нашем случае или очень малыми значениями таймаутов. Лучше сказать, что ошибка 502 возникает на шлюзе, который возвращает некий трафик. Шлюз - это как "точка доступа", которая позволяет вам получать трафик через себя от других сервисов. В нашем случае, шлюз - это сторонняя служба или приложение, который получает запросы от nginx.

Теперь подробно разберемся в причинах возникновения ошибки 502:

    • Nginx работает как прокси для другого веб-сервера: в этом случае шлюзом является другой веб-сервер. То есть Nginx используется как прокси для другого веб-сервера, и, в случае некорректной настройки веб-сервера или неработоспособности, вы получаете 502 ошибку, то есть Nginx не получил трафика от шлюза по какой-то причине. Чаще всего достаточно перезапустить веб-сервер. Небольшой пример конфигурации nginx как прокси
       
      server {
             listen 0.0.0.0:80;
             server_name proxy.it-e.ru;
             root /var/www/localhost/htdocs;
             location / {
                proxy_pass http://127.0.0.1:8080;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              }
      
      }
      
      Nginx принимает трафик на порт 80 для proxy.it-e.ru и перенаправляет его на http://127.0.0.1:8080. Если веб-сервер на порту 8080 не отвечает, то Nginx вернет ошибку 502.
    • Nginx работает с PHP-FPM: как и в первом примере, для получения ошибки 502, необходимо чтобы php-fpm не отвечал (остановлен, не доступен по сети или сокету из-за прав доступа, как правило). Чаще всего достаточно перезапустить php-fpm, который, например, перегружен запросами. Небольшой пример конфигурации nginx как прокси
       
         location ~ \.php$ {
           include fastcgi_params;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           fastcgi_pass unix:/var/run/php.sock;
         }
      
      Nginx принимает трафик для локейшна php$ и перенаправляет его на сокет /var/run/php.sock. Если сокета нет (то есть php-fpm остановлен) или недоступен для чтения, то Nginx вернет ошибку 502. Убедитесь, что параметр "listen" имеет правильное значение. Если в логе php-fpm видите сообщение "php5-fpm.sock failed (13: Permission denied)", то выставите корректные значения "listen.owner", "listen.group", "listen.mode" - права, которые будут установлены на сокет, при старте,а также "user", "nobody" - пользователь, от имени которого работает php-fpm.
    • Nginx работает как прокси с другим сервисом или приложением: как и в самом первом примере - пробуйте перезапустить шлюз. Конфигурация аналогична первому примеру.
    • Некорректные значения buffer или timeout.
      Попробуйте увеличить значения буферов и таймаутов в http блоке конфигурации Nginx. Например:
       
      fastcgi_buffers 32k;
      fastcgi_buffer_size 64k;
      fastcgi_connect_timeout 2m;
      fastcgi_send_timeout 2m;
      fastcgi_read_timeout 5m;
      
    Вот достаточно краткий обзор возможных причин возникновения 502 ошибки и путей решения этой проблемы, так как ошибка может возникать вследствие, глубоких проблем с ОС, сетью или по каким-то другим причинам.

Пожалуйста, уважайте труд автора, при копировании материалов сохраняйте ссылку на источник!

Комментарии (0)







Разрешённые теги: <b><i><br>Добавить новый комментарий: