Назад | Перейти на главную страницу

Случайные 502 ошибки только с phpMyAdmin через nginx / php-fpm, с php segfault

Я использую nginx и php-fpm на многих серверах. У некоторых есть php 5.4 с APC, а у других 5.5 или 5.6 с opcache. PhpMyAdmin на серверах на 5.4 работает без проблем. PhpMyAdmin на серверах 5.5 или 5.6 случайным образом выдает 502 ошибки. Все веб-сайты, размещенные на этих серверах, работают нормально и не вызывают ошибки 502.

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

Я тестировал, отключив opcache для phpMyAdmin, но это ничего не меняет.

Вот несколько журналов ошибок nginx:

2015/08/09 23:45:12 [error] 8386#8386: *8 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: XX.XX.XX.XX, server: phpmyadmin.host.com, request: "GET /js/get_scripts.js.php?scripts%5B%5D=jquery/jquery.uitablefilter.js&scripts%5B%5D=gis_data_editor.js&scripts%5B%5D=multi_column_sort.js&scripts%5B%5D=makegrid.js&scripts%5B%5D=sql.js&call_done=1 HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "phpmyadmin.host.com", referrer: "https://phpmyadmin.host.com/"
2015/08/09 23:46:04 [error] 8386#8386: *6 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: XX.XX.XX.XX, server: phpmyadmin.host.com, request: "GET /phpinfo.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "phpmyadmin.host.com"

Как видите, даже phpinfo от phpMyAdmin иногда попадает на 502

В журнале PHP FPM я получал segfaults для каждой ошибки 502. Вот как один:

[09-Aug-2015 23:46:04] WARNING: [pool www] child 6965 exited on signal 11 (SIGSEGV) after 372.815678 seconds from start
[09-Aug-2015 23:46:04] NOTICE: [pool www] child 9104 started

Наконец, использованная конфигурация: сайт nginx

server {
    listen  443 ssl;
    listen  [::]:443 ssl;
    ssl_certificate /etc/ssl/certs/phpmyadmin.pem;
    ssl_certificate_key /etc/ssl/private/phpmyadmin.key;

    server_name phpmyadmin.host.com;
    root /home/var/www/phpmyadmin/;

    location ~ \.php$ {
            expires off;
            include fastcgi_params;
            fastcgi_index index.php;
            fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass  unix:/var/run/php5-fpm.sock;

            fastcgi_buffers 8 16k;
            fastcgi_buffer_size 32k;
            fastcgi_connect_timeout 300;
            fastcgi_send_timeout 300;
            fastcgi_read_timeout 300;
            fastcgi_param PHP_VALUE "max_execution_time=360 \n memory_limit=500M \n post_max_size=40M \n upload_max_filesize=20M \n opcache.enable=0";
    }

    location ~ /\. {
            deny  all;
    }
    access_log /var/log/nginx/phpmyadmin/access.log;
    error_log /var/log/nginx/phpmyadmin/error.log;
}

php-fpm

[www]
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 10
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

phpMyadmin config.inc.php

<?php
/* Servers configuration */
$i = 0;

$cfg['blowfish_secret'] = 'a_32_char_long_secret_here';

/* Server: localhost [1] */
$i++;
$cfg['Servers'][$i]['verbose'] = '';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['port'] = '';
$cfg['Servers'][$i]['socket'] = '';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['auth_type'] = 'http';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';

/* End of servers configuration */

$cfg['DefaultLang'] = 'en';
$cfg['ServerDefault'] = 1;
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';
$cfg['ShowPhpInfo'] = true;

Что касается других расширений php: я использую пакеты debian с dotdeb для их установки. Включенные расширения:

Вы знаете, что могло вызвать эту проблему?

Дайте мне знать, если вам понадобится дополнительная информация.

Возможно, это не связано напрямую с phpMyAdmin, но у меня есть такие ошибки ТОЛЬКО с phpMyAdmin. Серверы используются с различными проектами PHP: Symfony2, magento, пользовательскими фреймворками и т. Д.

Насколько я могу судить, после быстрой и грязной отладки (эхо / выход) я обнаружил, что 502 поступают из инструкции chdir функции PMA_response :: response.

Закомментируйте это, и страница phpinfo от phpMyAdmin будет работать без проблем. (очевидно, что обычные страницы PMA не работают должным образом ...) Я уже проверял: