Рейтинг:1

Ошибка nginx 502 для вызова API из приложения, но работает в почтовом запросе и запросе curl

флаг ht

Среда:

  • Версия Laravel: 5.8.29
  • PHP-версия $ php --версия: PHP 7.2.24 (cli)
  • Версия Nginx $nginx -v: версия nginx: nginx/1.14.0 (Ubuntu)

Постановка задачи:

Все работает нормально, за исключением одного конкретного API, где я включаю в заголовок некоторый токен (типичный токен носителя), и он возвращает ошибку 502 из Chrome (на вкладке сети)

Однако, когда я пытаюсь вызвать это из Postman или используя завиток cli с сервера, он возвращает данные правильно.

Что тут может быть не так?


Ошибка

NGINX 502 Плохой шлюз

Журналы

$ sudo tail -30 /var/log/nginx/error.log
[ошибка] 4713#4713: *705118 recv() не удалось (104: сброс соединения узлом) при чтении заголовка ответа от восходящего потока, клиент: 111.11.11.111, сервер: domain.com, запрос: "POST /action/api/path HTTP/1.1", восходящий поток: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", хост: "domain.com", реферер: "domain.com/path"

$ sudo tail /var/log/php7.2-fpm.log
ВНИМАНИЕ: [pool www] дочерний элемент 28524 завершился по сигналу 11 (SIGSEGV — дамп ядра) после 
ВНИМАНИЕ: [pool www] дочерний 8033 запущен

Файлы и конфигурация:

/etc/nginx/nginx.conf

www-данные пользователя;
рабочие_процессы авто;
pid /run/nginx.pid;
включить /etc/nginx/modules-enabled/*.conf;

События {
    worker_connections 768;
    # multi_accept on;
}

http {

    ##
    # Основные настройки
    ##

    отправить файл включен;
    tcp_nopush включен;
    tcp_nodelay включен;
    keepalive_timeout 65;
    типы_хэш_макс_размер 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    включить /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Настройки SSL
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Удаление SSLv3, ссылка: POODLE
    ssl_prefer_server_ciphers включен;

    ##
    # Настройки ведения журнала
    ##

    журнал_доступа /var/log/nginx/access.log;
    журнал_ошибок /var/log/nginx/error.log;

    ##
    # Настройки Gzip
    ##

    gzip включен;

    # gzip_vary on;
    # gzip_proxyed любой;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Конфигурации виртуального хоста
    ##

    включить /etc/nginx/conf.d/*.conf;
    включить /etc/nginx/sites-enabled/*;

    # максимальный размер поста
    client_max_body_size 100M;
}


#почта {
# # См. пример сценария аутентификации по адресу:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
# сервер {
# слушать localhost:110;
# протокол pop3;
# прокси включен;
# }
# 
# сервер {
# слушать localhost:143;
# протокол imap;
# прокси включен;
# }
#}

/etc/nginx/сайты-доступны/домен.com

сервер {
    слушать 443;
    имя_сервера домен.com;
    корень /путь/публичный;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    индекс index.php;

    кодировка utf-8;

    место расположения / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found выключен; }
    location = /robots.txt { access_log off; log_not_found выключен; }

    страница_ошибки 404 /index.php;

    расположение ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        включить fastcgi_params;
    }

    расположение ~ /\.(?!известно).* {
        отрицать все;
    }

    SSL включен;
    ssl_certificate /etc/nginx/ssl/domain.com.chained.crt;
    ssl_certificate_key /etc/nginx/ssl/domain.com.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers включен;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

}

сервер {
    слушать 80;
    имя_сервера домен.com;
    переписать ^/(.*) https://domain.com/$1 навсегда;
}

/etc/php/7.2/fpm/pool.d/www.conf Директивы пула

[www]

пользователь = www-данные
группа = www-данные

слушать = /run/php/php7.2-fpm.sock

listen.owner = www-данные
listen.group = www-данные

вечера = динамический
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

PHP cURL-запрос

частные $ заголовки = [
    'Принять: приложение/json',
    'Тип контента: приложение/json',
];

частный $baseURL = 'http://otherdomain.in/api/v1/';


приватная функция postRequest($data, $endpoint) {

    если ( !is_null($this->apiToken)) {

        $authorization = "Авторизация: носитель {$this->apiToken}";
        array_push($this->заголовки, $авторизация);
    }

    $url = "{$this->baseURL}/{$endpoint}";

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, json_encode($this->заголовки) );
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $данные);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    $responseJSON = curl_exec($ch);

    $ ответ = json_decode ($ ответ JSON, ИСТИНА);

    вернуть $ ответ
}

РЕДАКТИРОВАТЬ 1:

я перезапустил fastcgi процесс с использованием следующих запрос

$ sudo service php7.2-fpm перезапустить

$ sudo tail /var/log/php7.2-fpm.log
[13-Nov-2021 05:32:03] ВНИМАНИЕ: интервал мониторинга systemd установлен на 10000 мс.
[13-Nov-2021 05:32:56] ПРЕДУПРЕЖДЕНИЕ: [pool www] дочерний элемент 28870 завершил работу по сигналу 11 (SIGSEGV — дамп ядра) через 53,229996 секунд с момента запуска
[13-Nov-2021 05:32:56] ВНИМАНИЕ: [pool www] child 28879 запущен
[13-Nov-2021 05:42:47] ВНИМАНИЕ: Прекращение...
[13-Nov-2021 05:42:47] ВНИМАНИЕ: выход, пока-пока!
[13-Nov-2021 05:42:47] ВНИМАНИЕ: запущен fpm, pid 29564
[13-Nov-2021 05:42:47] ВНИМАНИЕ: готово к обработке подключений
[13-Nov-2021 05:42:47] ВНИМАНИЕ: интервал мониторинга systemd установлен на 10000 мс.
[13-Nov-2021 05:43:04] ПРЕДУПРЕЖДЕНИЕ: [pool www] дочерний элемент 29592 завершил работу по сигналу 11 (SIGSEGV — дамп ядра) через 17,115362 секунды с момента запуска
[13-Nov-2021 05:43:04] ВНИМАНИЕ: [pool www] child 29596 запущен

РЕДАКТИРОВАТЬ 2:

Я обнаружил, что мой opcache это уже комментарий. Таким образом, нет смысла отключать или увеличивать лимит памяти в соответствии со следующим отвечать

/etc/php/7.2/fpm/php.ini

[opcache]
; Определяет, включен ли Zend OPCache
;opcache.enable=0

; Определяет, включен ли Zend OPCache для CLI-версии PHP.
;opcache.enable_cli=0

; Размер хранилища общей памяти OPcache.
;opcache.memory_consumption=196

Ответить или комментировать

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