CentOs 6, Php7.1, libevent, nginx возвращает 502

Я обновляю веб-приложение laravel с php5.6 до php7.1, что приводит меня к обновлению модуля libevent. Приложение асинхронно и основано на реагирующей библиотеке.

Итак, я закончил с установленным: PHP 7.1.12, libevent: 2.1.8 + expressif / pecl-event-libevent. И у меня стабильный «502 Bad Gateway» от nginx. Без libevent (ReactStreamLoop) или на PHP 5.6 + libevent: 1.4 работает нормально.
Запрос земли в index.php и что-то происходит позже, внутри запуска приложения.

журнал nginx:

2017/11/24 10:41:24 [ошибка] 24985 # 0: * 7 recv () завершилась неудачно (104: сброс соединения по узлу) при чтении заголовка ответа из восходящего потока, клиент: 14.183.16.180, сервер: 173.199.117.122, запрос: «GET / HTTP / 1.1», восходящий поток: «fastcgi: //127.0.0.1: 9000», хост: «173.199.117.122»

2017/11/24 10:41:25 [ошибка] 24985 # 0: * 7 recv () завершились неудачно (104: сброс соединения по одноранговому узлу) при чтении заголовка ответа из восходящего потока, клиент: 14.183.16.180, сервер: 173.199.117.122, запрос: «GET / HTTP / 1.1», восходящий поток: «fastcgi: //127.0.0.1: 9000», хост: «173.199.117.122»

php-fpm log:

[24-Nov-2017 10:41:24] ПРЕДУПРЕЖДЕНИЕ: [pool www] ребенок 22300 вышел по сигналу 11 (SIGSEGV) через 39,486978 секунд от начала

[24-Nov-2017 10:41:24] УВЕДОМЛЕНИЕ: [pool www] ребенок 22331 запущен

[24-Nov-2017 10:41:25] ВНИМАНИЕ: [pool www] ребенок 22301 вышел по сигналу 11 (SIGSEGV) через 40.205103 секунд от начала

[24-Nov-2017 10:41:25] УВЕДОМЛЕНИЕ: [pool www] ребенок 22332 запущен

ОБНОВЛЕНИЕ: работает, если принудительное использование ReactStreamLoop.

ОБНОВЛЕНИЕ: воспроизводится локально на аналогичном конфиге. Нашел такой пример, который вылетает с LibEventLoop, но работает с StreamSelectLoop.

require_once __DIR__.'/../vendor/autoload.php';

$loop = new \React\EventLoop\LibEventLoop();
//$loop = new \React\EventLoop\StreamSelectLoop();

$config = array(
'host'      => '127.0.0.1',
'port'      => '3306',
'dbname'    => 'mysql',
'user'      => 'root',
'passwd'    => 'root',
'charset'   => 'utf8',
);

$client = new \React\MySQL\Connection($loop, $config);

$client->connect(function() {});

$client->query('select 8 as cnt', function () {
echo "inside\n";
});

echo "start\n";
$loop->run();

выход:

#php ./tests/test.php
start
Segmentation fault (core dumped)

0

Решение

Используемое расширение не совместимо с PHP 7 и выше. Вы должны использовать одну из других реализаций цикла событий, такую ​​как основанная на stream_select() или одно из поддерживаемых расширений.

Увидеть https://github.com/reactphp/event-loop/pull/62 для дополнительной информации.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]