LINUX.ORG.RU

Nginx + php-fpm на разных хостах - error: failed (104: Connection reset by peer) while reading response header from upstream


0

1

Добрый день всем! Ситуация такая: необходимо настроить связку php-fpm + nginx, чтоб они работали на разных виртуалках в одной локальной сети. Собственно после установки и настройки всего в логах nginx возникает сабжевая ошибка при попытке зайти на тестовую страничку, в браузере при этом, естественно, 502 - Bad Gateway. При этом в логах php-fpm пусто, только

[12-May-2014 12:30:48] NOTICE: fpm is running, pid 11860
[12-May-2014 12:30:48] NOTICE: ready to handle connections
и все. Перекопала все, что можно, везде в основном предлагается подключать fastcgi не через unix-сокет, а через ip-адрес:порт, но у меня, собственно, так и есть. Фаерволов между машинами нет. Привожу конфиги.

/etc/nginx/nginx.conf:

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
        worker_connections 1024;
        multi_accept on;
        use epoll;
}
http {
        keepalive_timeout 65;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-enabled/test:

server {
        root /webdata/internal/test;
        index index.php;
        server_name xx.xx.xx.xx;
        location ~ \.php$ {
           fastcgi_pass 192.168.199.223:9000;
                #fastcgi_index index.php;
                #fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

/etc/php5/fpm/php-fpm.conf

[global]
pid = /var/run/php5-fpm.pid
error_log = /var/log/php5-fpm.log
include=/etc/php5/fpm/pool.d/*.conf

/etc/php5/fpm/pool.d/www .conf

[www]
user = www-data
group = www-data
listen = 192.168.199.223:9000

listen.allowed_clients = 127.0.0.1, 192.168.199.224
pm = static
pm.max_children = 100
pm.max_requests = 100
pm.status_path = /status_php-test

ping.path = /ping_php-test
chdir = /webdata 

Ну проверьте, что порт 192.168.199.223:9000 дествительно слушается по выхлопу ″netstat″ или ″ss″. Ещё есть ″cgi-fcgi″ с помощью которого можно слать GET-запросы. Хотя бы станет понятнее, в nginx или в php-fpm проблема.

mky ★★★★★ ()
Ответ на: комментарий от mky

порт слушается:

# netstat -nat|grep 9000
tcp        0      0 192.168.199.223:9000    0.0.0.0:*               LISTEN

Incher ()
Ответ на: комментарий от mky

а вот про cgi-fcgi не совсем понятно, откуда его запускать и что в параметре ключа -connect <connName> указывать.

Incher ()
Ответ на: комментарий от Incher

Ну, так как у вас фильтрация по src-адресу, то запускать можно только с 192.168.199.224. Потому, что, если вы запустите cgi-fcgi на машине с php-fpm (192.168.199.223), то он и пойдёт с адреса 192.168.199.223, а у вас его нету в allowed_clients.

В параметре ″-connect″ указывать это самое ″192.168.199.223:9000″.

SCRIPT_NAME=/ping_php-test \
SCRIPT_FILENAME=/ping_php-test \
REQUEST_METHOD=GET \
cgi-fcgi -bind -connect 192.168.199.223:9000
mky ★★★★★ ()
Ответ на: комментарий от mky

Запускаю эту команду на 192.168.199.224, в ответ ничего не выводится, в логах php-fpm.log тоже ничего нового.

Incher ()

Если php и nginx на одном хосте чем сокеты не устраивают?

KIRALEX ()
Ответ на: комментарий от KIRALEX

В том-то и дело, что на разных, это ключевое требование, так как это тестовый стенд, имитирующий работу продакшена, а на продакшене они на разных хостах.

Incher ()
Ответ на: комментарий от Incher

на 192.168.199.224 попробуйте telnet 192.168.199.223 9000
подключается?

LILO ()
Ответ на: комментарий от LILO

Подключается и тут же сбрасывается, то есть в ответ на команду сразу выводится весь этот текст:

Trying 192.168.199.223...
Connected to 192.168.199.223.
Escape character is '^]'.
Connection closed by foreign host.

Для примера telnet 192.168.199.223 22 коннектится и ждет дальнейшего ввода команд:

# telnet 192.168.199.223 22
Trying 192.168.199.223...
Connected to 192.168.199.223.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.3

Вообще странно, ведь netstat -tapnl | grep 9000 показывает, что 192.168.199.223:9000 ждет коннекта с любого хоста и порта:

tcp        0      0 192.168.199.223:9000    0.0.0.0:*               LISTEN      11860/php-fpm.conf)

Incher ()
Ответ на: комментарий от LILO

После повышения log_level до debug и рестарта php5-fpm в логах появилось:

[14-May-2014 11:39:10] NOTICE: Finishing ...
[14-May-2014 11:39:10] NOTICE: exiting, bye-bye!
[14-May-2014 11:39:10.803079] DEBUG: pid 15124, fpm_scoreboard_init_main(), line 40: got clock tick '100'
[14-May-2014 11:39:10.803862] DEBUG: pid 15124, fpm_event_init_main(), line 331: event module is epoll and 1 fds have been reserved
[14-May-2014 11:39:10.803919] NOTICE: pid 15124, fpm_init(), line 80: fpm is running, pid 15124
[14-May-2014 11:39:10.804351] DEBUG: pid 15124, fpm_children_make(), line 421: [pool www] child 15125 started
[14-May-2014 11:39:10.804761] DEBUG: pid 15124, fpm_children_make(), line 421: [pool www] child 15126 started
<...>
[14-May-2014 11:39:10.805169] DEBUG: pid 15124, fpm_children_make(), line 421: [pool www] child 15225 started
[14-May-2014 11:39:10.911376] DEBUG: pid 15124, fpm_children_make(), line 421: [pool www] child 15226 started
[14-May-2014 11:39:10.911410] DEBUG: pid 15124, fpm_event_loop(), line 360: 117704 bytes have been reserved in SHM
[14-May-2014 11:39:10.911420] NOTICE: pid 15124, fpm_event_loop(), line 361: ready to handle connections

Когда захожу на сайт в логах php-fpm ничего нового не появляется.

Incher ()
Ответ на: комментарий от Incher

Попробуйте убрать ″listen.allowed_clients″, чтобы коннект принимался с любых адресов. Тогда можно будет попробовать ″telnet″ и ″cgi-fcgi″ с машины 192.168.199.223, чтобы исключить влияние сети.

mky ★★★★★ ()
Ответ на: комментарий от mky

Спасибо большое! Закоментировала ″listen.allowed_clients″ и сайт заработал.

Incher ()
Ответ на: комментарий от Incher

То есть у nginx-а нифига не 192.168.199.224, так получается?

LILO ()
Ответ на: комментарий от LILO

нет, у него как раз таки 192.168.199.224, так что совершенно непонятно, почему вариант со строкой «listen.allowed_clients = 127.0.0.1, 192.168.199.224» не работал. Магия какая-то...

Incher ()
Ответ на: комментарий от KIRALEX

Напишу не совсем в тему, но мне почему-то кажется, что nginx при нагрузках работает стабильнее через tcp-сокет, чем через unix.

generator ★★★ ()
Ответ на: комментарий от Incher

Решено

Столкнулся с такой же проблемой. Решилось просто - после запятой не должно быть пробела.

wawilon ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.