2010-11-23 5 views
50

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

Я использую это, чтобы охватить экземпляр на старте сервера, используя следующую строку в 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 

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

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

+4

Во-первых, не сдавайтесь! nginx - замечательная часть программного обеспечения. Попробуйте с php-fpm. Не пропустите директорию `/ etc/php5/fpm` с настройками внутри и обратите внимание на копию php.ini, которая может переопределить вашу собственную конфигурацию php.ini. Настройте журналы, чтобы вы могли посмотреть, не сработает ли она. – 2010-11-23 03:08:21

+2

Попробуйте войти в сервер как root и введите `/ 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` в командной строке. (Это та же строка, что и в вашем rc.local.) Вы получаете сообщения об ошибках? – kijin 2010-11-23 03:59:53

+3

Я считаю, что этот вопрос будет более уместным (и получить больше ответов) на [serverfault.com] (http://serverfault.com). – netcoder 2010-11-23 05:04:15

ответ

9

появляется ошибка 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? 
0

Аналогичная установка здесь и выглядит это просто ошибка в моем коде. В начале моего приложения я искал URL-адрес нарушителя, и это сработало: echo '<html>test</html>'; exit();

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

4

Если вы используете 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 для меня.

2

Когда я 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 нужно знать пользователю, что веб-сервер работает, как и предполагает его апач, когда, Nginx, это на самом деле Nginx, и потребности быть измененным.

40

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

Перейти к /etc/php5/fpm/pool.d/www.conf и редактировать линию listen = /var/run/php5-fpm.sock к listen = 127.0.0.1:9000

Может быть, это поможет вам.

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

1

Вы можете Nginx игнорировать клиент прерывает с помощью:

location/{ 
    proxy_ignore_client_abort on; 
} 
4

изменения

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

в

fastcgi_pass unix:/var/run/php5-fpm.sock; 
8

Перейти к /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.

6

Вы должны соответствовать настройкам 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; 
} 

Матч эти ценности, и вы должны быть все в порядке.

1

Попробуйте отключить модули xcache или apc. Кажется, что проблема с некоторыми версиями заключается в сохранении объектов в переменной сеанса.

1

Надеюсь, этот совет спасет чужую жизнь. В моем случае проблема заключалась в том, что у меня не хватало памяти, но только немного, было трудно думать об этом. Потратил 3 часа на это. Я рекомендую запускать:

sudo htop 

или

sudo free -m 

... наряду с запуском проблемных запросов на сервере, чтобы увидеть, если память не закончится. И если это так, как в моем случае, вам нужно создать файл подкачки (если у вас его уже нет).

Я следовал этот учебник, чтобы создать файл подкачки на Ubuntu Server 14.04 и он работал просто отлично: http://www.cyberciti.biz/faq/ubuntu-linux-create-add-swap-file/

2

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

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

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

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

sudo chmod go+rw /var/run/php5-fpm.sock