nginx 502 плохой шлюз - PullRequest
       8

nginx 502 плохой шлюз

59 голосов
/ 23 ноября 2010

Я получаю 502 Bad Gateway с nginx при использовании spawn fcgi для порождения php5-cgi.

Я использую это для охвата экземпляра на старте сервера, используя следующую строку в rc.local

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid

предположительно я получаю сообщение об ошибке, потому что spawn-fcgi / php5-cgi умирает и больше ничего не слушает, чтобы разобрать php.

Я не получаю ничего в журналах, которые я могу видеть где-либо,У меня нет идей (и новичок в этой настройке с nginx)

Ответы [ 13 ]

52 голосов
/ 11 мая 2013

Я выполнил localhost, и на странице отобразилось сообщение 502 bad gateway.Это помогло мне:

  1. Редактировать /etc/php5/fpm/pool.d/www.conf
  2. Изменить listen = /var/run/php5-fpm.sock на listen = 127.0.0.1:9000
  3. Убедитесь, что правильно установлено в nginx.conf.
  4. Выполнить sudo service php5-fpm restart

Возможно, это поможет вам.

Источник: http://wildlyinaccurate.com/solving-502-bad-gateway-with-nginx-php-fpm

9 голосов
/ 15 апреля 2011

Ошибка 502 появляется, потому что nginx не может передать php5-cgi.Вы можете попробовать перенастроить php5-cgi, чтобы использовать сокеты unix, в отличие от tcp .., затем настроить сервер так, чтобы он указывал на сокет вместо tcp ...

ps auxww | grep php5-cgi #-- is the process running?  
netstat -an | grep 9000 # is the port open? 
8 голосов
/ 30 июня 2014

Вы должны соответствовать настройкам PHP-FPM и Nginx для связи через сокеты или TCP.

Итак, перейдите к /etc/php5/fpm/pool.d/www.conf и найдите эту строку:

listen = /var/run/php5-fpm.sock

Затем перейдите к /etc/nginx/nginx.conf

Ищите это:

upstream php {
    server unix:/var/run/php5-fpm.socket;
}

Сопоставьте эти значения, и у вас все будет готово.

8 голосов
/ 30 июня 2014

Перейдите к /etc/php5/fpm/pool.d/www.conf, и если вы используете сокеты или эта строка не закомментирована

listen = /var/run/php5-fpm.sock

Установите также пару других значений: -

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

Не забудьтеперезапустите php-fpm и nginx.Убедитесь, что вы используете одного и того же владельца nginx и имя группы.

5 голосов
/ 08 марта 2012

Если вы используете сервер Linux, убедитесь, что ваша конфигурация IPTABLES правильная.

Выполните sudo iptables -L -n, вы получите список ваших открытых портов.Если не существует правила Iptables для открытия порта, обслуживающего скрипт fcgi, вы получите ошибку 502.Правило Iptables, открывающее правильный порт, должно быть указано перед . Любое правило, которое категорически отклоняет все пакеты (т. Е. Правило вида "REJECT ALL -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable или аналогичное)

В моей конфигурации, чтобы правильноОткройте порт, мне пришлось выполнить эту команду (предположим, что мой сервер fcgi работает на порту 4567):

sudo iptables -I INPUT 1 -p tcp --dport 4567 -j ACCEPT

ВНИМАНИЕ: Это откроет порт 4567 для всего мира.

Итакможет быть, лучше сделать что-то вроде этого:

   sudo iptables-save >> backup.iptables
   sudo iptables -D INPUT 1 #Delete the previously entered rule
   sudo iptables -I INPUT 1 -p tcp --dport 8080 -s localhost -j ACCEPT # Add new rule

Это позволило мне убрать ошибку 502.

4 голосов
/ 10 октября 2013

изменение

fastcgi_pass    unix:/var/run/php-fpm.sock;

до

fastcgi_pass    unix:/var/run/php5-fpm.sock;
2 голосов
/ 24 августа 2016

У меня была такая же проблема при настройке сервера Ubuntu.Оказывается, у меня возникла проблема из-за неправильных разрешений для файла сокета.

Если у вас возникла проблема из-за проблемы с разрешениями, вы можете раскомментировать следующие строки из: / etc / php5 / fpm / pool.d / www.conf

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

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

sudo chmod go+rw /var/run/php5-fpm.sock
2 голосов
/ 27 мая 2013

Вы можете заставить nginx игнорировать прерывания клиента, используя:

location / {
  proxy_ignore_client_abort on;
}
2 голосов
/ 28 марта 2013

Когда я сделал sudo /etc/init.d/php-fpm start, я получил следующую ошибку:

Starting php-fpm: [28-Mar-2013 16:18:16] ERROR: [pool www] cannot get uid for user 'apache'

Я думаю, /etc/php-fpm.d/www.conf должен знать пользователя, что веб-сервер работает как, и предполагает, что это apache, когда для nginx этона самом деле nginx, и его нужно изменить.

1 голос
/ 11 января 2017

Если вы используете Ubuntu и все вышеперечисленное не помогло вам, скорее всего, виноват AppArmor.

Вот хорошее руководство, как это исправить: https://www.digitalocean.com/community/tutorials/how-to-create-an-apparmor-profile-for-nginx-on-ubuntu-14-04

Короче говоря:

vi /etc/apparmor.d/nginx

Или

sudo aa-complain nginx
sudo service nginx restart

Посмотреть всеработает хорошо ... тогда

sudo aa-logprof

У меня все еще были проблемы с тем, что Nginx не смог прочитать error.log, хотя у него были все возможные разрешения, в том числе в Apparomor.Я предполагаю, что это как-то связано с порядком записей или каким-то взаимодействием с Passenger или PHP-Fpm ... У меня не хватило времени, чтобы устранить эту проблему, и сейчас вернулись в Apache.(Apache работает намного лучше, к вашему сведению.)

AppArmor просто позволяет Nginx делать все, что он хочет, если вы просто удалите профиль:

 rm /etc/apparmor.d/nginx
 service apparmor reload

Шокирующе, но вряд ли удивительно, много сообщений наИсправление ошибок Nginx приводит к полному отключению SELinux или удалению AppArmor.Это плохая идея, потому что вы теряете защиту от большого количества программного обеспечения.Просто удаление профиля Nginx - лучший способ устранения неполадок в ваших конфигурационных файлах.Если вы знаете, что проблема не в ваших конфигурационных файлах Nginx, вы можете потратить время на создание правильного профиля AppArmor.

Без профиля AppArmor, особенно если вы запускаете что-то вроде Passenger, я даю вашему серверу около месяца на то, чтобы зайти в тупик.

...