восходящий поток отправил слишком большой заголовок при чтении заголовка ответа из восходящего потока

Я получаю такие ошибки:

2014/05/24 11:49:06 [ошибка] 8376 # 0: * 54031 восходящий поток отправил слишком большой заголовок при чтении заголовка ответа от восходящего потока, клиент: 107.21.193.210, сервер: aamjanata.com, запрос: "GET / the- хроники промывания мозгов, спонсируемые правительством Гуджарата /,% 20 https://aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20 https://aamjanata.com/the-brainwash-chronicles- спонсируется правительством Гуджарата /,% 20 https://aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20 гуджарат-правительство /,% 20 https://aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20 ,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/t Хроники промывания мозгов, спонсируемые правительством Гуджарата /,% 20 https://aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20 https://aamjanata.com/the-brainwash- хроники-спонсируемые-правительством-гуджаратом /,% 20 https://aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20 автор-гуджарат-правительство /,% 20 -government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/, % 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: /aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government /,% 20https: / aamjanata.com/the-brainwash-chronicles-sponsored-by-gujarat-government/,%20https:/aamjanata.com/the-brainwash-ch ronicles-спонсируется-правительством-Гуджарат /,% 20ht

Всегда одно и то же. URL-адрес повторяется снова и снова через запятую. Не могу понять, что вызывает это. У кого-нибудь есть идея?

Обновление: еще одна ошибка:

http request count is zero while sending response to client

Вот конфиг. Есть и другие нерелевантные вещи, но эта часть была добавлена ​​/ отредактирована

fastcgi_cache_path /var/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;
    # Upstream to abstract backend connection(s) for PHP.
    upstream php {
            #this should match value of "listen" directive in php-fpm pool
            server unix:/var/run/php5-fpm.sock;
    }

А затем в серверном блоке: установите $ skip_cache 0;

    # POST requests and urls with a query string should always go to PHP
    if ($request_method = POST) {
            set $skip_cache 1;
    }
    if ($query_string != "") {
            set $skip_cache 1;
    }

    # Don't cache uris containing the following segments
    if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
            set $skip_cache 1;
    }

    # Don't use the cache for logged in users or recent commenters
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
            set $skip_cache 1;
    }

    location / {
            # This is cool because no php is touched for static content.
            # include the "?$args" part so non-default permalinks doesn't break when using query string
            try_files $uri $uri/ /index.php?$args;
    }


    location ~ \.php$ {
            try_files $uri /index.php;
            include fastcgi_params;
            fastcgi_pass php;
            fastcgi_read_timeout 3000;

            fastcgi_cache_bypass $skip_cache;
            fastcgi_no_cache $skip_cache;

            fastcgi_cache WORDPRESS;
            fastcgi_cache_valid  60m;
    }

    location ~ /purge(/.*) {
        fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
    }`

person Vidyut    schedule 24.05.2014    source источник
comment
ваша конфигурация прокси не кажется правильной. Можете поделиться конфигом?   -  person Neo    schedule 24.05.2014
comment
можешь попробовать добавить: fastcgi_buffers 16 16k; fastcgi_buffer_size 32 КБ;   -  person Neo    schedule 24.05.2014
comment
возможный дубликат апстрим слишком велик - nginx + codeigniter   -  person dnozay    schedule 18.03.2015


Ответы (12)


Добавьте следующее в свой файл conf

fastcgi_buffers 16 16k; 
fastcgi_buffer_size 32k;
person Neo    schedule 24.05.2014
comment
Хотя ваш ответ привел меня к правильному ответу, вы должны показать, как определить правильный размер буфера и почему это важно. В противном случае это выстрел в темноте. См. Здесь, чтобы получить представление о размере: gist.github.com/magnetikonline / - person Wes Johnson; 09.09.2014
comment
У меня сложилось впечатление, что на самом деле имеет значение только второй параметр, потому что он касается первой части ответа, который обычно содержит небольшой заголовок ответа, см. http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_buffer_size - person greg0ire; 05.08.2015
comment
@ greg0ire вы имеете в виду просто fastcgi_buffer_size 32k; ? Это верно. Для проблемы с заголовками ответов подойдет только параметр fastcgi_buffer_size. Fastcgi_buffers помогает определить общий размер буфера. Это помогает в решении проблем, когда виден восходящий ответ, буферизованный во временный файл. - person Neo; 05.08.2015
comment
fastcgi_buffer_size 32 КБ; в одиночку не сработало, мне понадобились обе строчки для перезапуска NginX. Я пришел сюда из-за ошибки 502 в NginX, вызванной плагином WordPress. - person PJ Brunet; 20.04.2016
comment
Если fast_cgi_buffers не помогло, попробуйте proxy_buffers ответ ниже от @amd - person icc97; 29.03.2017
comment
Любое объяснение этого ответа, пожалуйста. - person Edson Horacio Junior; 17.05.2017
comment
Похоже, что nginx 502, когда часть заголовка разделена на блоки буфера. Увеличение размера буфера снижает (но не исключает) вероятность этого. Вот более подробная информация: gist.github.com/neerolyte/752f915736d133f170fc62a0 - person lyte; 09.08.2017
comment
Я действительно думаю, что правильным ответом на это должно быть исправление конфигурации php-fpm, чтобы ошибки записывались в php-fpm error.log вместо stderr. - person lyte; 09.08.2017
comment
У меня это работает, я просто хочу добавить, что в ubuntu 16.04 файл конфигурации nginx находится по адресу /etc/nginx/nginx.conf, а значения должны идти внутри http {...} - person Mario; 26.02.2018
comment
Еще я увеличил размер буфера. Но я сейчас хочу знать, какой плагин привел к тому, что заголовок Reponse стал настолько большим, что произошла ошибка 502. Есть какие-нибудь советы, как найти причину проблемы? В моем случае это происходило только на определенной странице WP при входе в систему. - person Bas van Dijk; 11.04.2018
comment
В моем nginx.conf по умолчанию было gzip_buffers 16 8k, поэтому установка только fastcgi_buffer_size 32k не удалась, поскольку она превышала размер буфера 8k. Кажется, вы можете либо установить оба параметра, или уменьшить параметр fastcgi_buffer_size, чтобы он соответствовал gzip_buffers. Не уверен в точных требованиях: YMMV - person Dave S; 18.06.2018
comment
Вы можете найти информацию о том, как настроить fastcgi_buffer_size здесь - person Danila Vershinin; 08.07.2018
comment
Ты сэкономил мне много времени, братан, спасибо. - person Yassin Mokni; 03.11.2019
comment
Работает для меня! Будет ли fastcgi_buffers 32 32k еще быстрее? Или вам следует поддерживать минимальное количество сегментов буфера? как в fastcgi_buffers 16 32k? - person Justin Breen; 05.01.2020
comment
Некоторым это может помочь: ma. ttias.be/ - person spekulatius; 04.11.2020

Если nginx работает как прокси / обратный прокси

то есть для пользователей ngx_http_proxy_module

Помимо fastcgi, модуль proxy также сохраняет заголовок запроса во временном буфере.

Поэтому вам может потребоваться увеличить proxy_buffer_size и proxy_buffers или полностью отключить его (прочтите документация nginx).

Пример конфигурации буферизации прокси

http {
  proxy_buffer_size   128k;
  proxy_buffers   4 256k;
  proxy_busy_buffers_size   256k;
}

Пример отключения буфера прокси (рекомендуется для серверов с длительным опросом)

http {
  proxy_buffering off;
}

Для получения дополнительной информации: документация по модулю прокси Nginx

person amd    schedule 18.12.2014
comment
proxy_busy_buffers_size должен быть меньше, чем размер всех proxy_buffers минус один буфер - person chovy; 30.03.2015
comment
ты мужчина! Благодарность! первый вариант работал в моем приложении ruby ​​on rails - person Nezir; 27.05.2019
comment
Наверное, глупый вопрос, но у меня есть прокси перед сервером, который возвращает эту ошибку. Смена буфера сработала, но на внутренней машине появляется новая ошибка. writev() failed (104: Connection reset by peer) while sending to client Возможно, эти настройки прокси-сервера исправят эту ошибку, и будут ли они работать на вышестоящем сервере или прокси-сервере? - person Adam Patterson; 15.08.2019
comment
Почему proxy_buffers 4 ...? Поскольку по умолчанию кажется 8 - person adrianTNT; 30.01.2020
comment
Для меня установка буферов все еще была необходима, несмотря на отключение буферизации ... - person Luc; 06.12.2020

Инструкции Plesk

Я объединил здесь два самых популярных ответа

В Plesk 12 у меня был nginx, работающий как обратный прокси (который, я думаю, используется по умолчанию). Таким образом, текущий главный ответ не работает, поскольку nginx также запускается как прокси.

Я пошел в Subscriptions | [subscription domain] | Websites & Domains (tab) | [Virtual Host domain] | Web Server Settings.

Затем внизу этой страницы вы можете установить Дополнительные директивы nginx, которые я установил как комбинацию двух верхних ответов здесь:

fastcgi_buffers         16  16k;
fastcgi_buffer_size         32k;
proxy_buffer_size          128k;
proxy_buffers            4 256k;
proxy_busy_buffers_size    256k;
person icc97    schedule 29.03.2017
comment
Где? Какой конфиг? - person Redsandro; 13.11.2017
comment
@Redsandro Если вы не можете найти его через Subscriptions | [subscription domain] | Websites & Domains (tab) | [Virtual Host domain] | Web Server Settings, тогда я не понимаю, что вы имеете в виду? - person icc97; 13.11.2017
comment
это было решением для меня: Домены ›Имя домена› Настройки Apache и nginx ›Дополнительные директивы nginx Plesk Onyx версии 17.8.11 - person user74847; 26.02.2019
comment
Я добавил это в новый файл /etc/nginx/conf.d/proxy.conf и перезапустил nginx, все работает нормально, спасибо! - person rubo77; 10.07.2019

upstream sent too big header while reading response header from upstream - это общий способ nginx сказать: «Мне не нравится то, что я вижу»

  1. Поток вашего восходящего сервера разбился
  2. Вышестоящий сервер отправил обратно недопустимый заголовок
  3. Уведомление / предупреждения, отправленные обратно из STDERR, переполнили их буфер, и он, и STDOUT были закрыты

3: Посмотрите журналы ошибок над сообщением, это поток с записанными строками, предшествующими сообщению? PHP message: PHP Notice: Undefined index: Пример фрагмента из цикла моего файла журнала:

2015/11/23 10:30:02 [error] 32451#0: *580927 FastCGI sent in stderr: "PHP message: PHP Notice:  Undefined index: Firstname in /srv/www/classes/data_convert.php on line 1090
PHP message: PHP Notice:  Undefined index: Lastname in /srv/www/classes/data_convert.php on line 1090
... // 20 lines of same
PHP message: PHP Notice:  Undefined index: Firstname in /srv/www/classes/data_convert.php on line 1090
PHP message: PHP Notice:  Undefined index: Lastname in /srv/www/classes/data_convert.php on line 1090
PHP message: PHP Notice:  Undef
2015/11/23 10:30:02 [error] 32451#0: *580927 FastCGI sent in stderr: "ta_convert.php on line 1090
PHP message: PHP Notice:  Undefined index: Firstname

вы можете видеть в третьей строке снизу, что предел буфера был достигнут, сломан, и следующий поток записал поверх него. Затем Nginx закрыл соединение и вернул 502 клиенту.

2: регистрируйте все заголовки, отправленные по запросу, просмотрите их и убедитесь, что они соответствуют стандартам (nginx не разрешает ничего старше 24 часов для удаления / истечения срока действия cookie, отправляя недопустимую длину содержимого, потому что сообщения об ошибках были буферизованы до подсчета содержимого. ..). Вызов функции getallheaders обычно может помочь в ситуациях с абстрактным кодом php получить все заголовки

примеры включают:

<?php
//expire cookie
setcookie ( 'bookmark', '', strtotime('2012-01-01 00:00:00') );
// nginx will refuse this header response, too far past to accept
....
?>

и это:

<?php
header('Content-type: image/jpg');
?>

<?php   //a space was injected into the output above this line
header('Content-length: ' . filesize('image.jpg') );
echo file_get_contents('image.jpg');
// error! the response is now 1-byte longer than header!!
?>

1: проверьте или создайте журнал сценария, чтобы убедиться, что ваш поток достигает правильной конечной точки и не завершается до завершения.

person ppostma1    schedule 23.11.2015
comment
Этот ответ попал в самую точку. Иногда дело не только в конфигурации nginx, но и в том, что на самом деле создает заголовок. Когда error_reporting содержит уведомления, но display_errors отключен в php.ini, все сообщения отображаются в заголовке FCGI, а не в содержимом. - person Schien; 23.04.2018

Если вы используете фреймворк Symfony: прежде чем возиться с конфигурацией Nginx, попробуйте сначала отключить ChromePHP.

1 - Откройте app / config / config_dev.yml

2 - Прокомментируйте эти строки:

#chromephp:
    #type:   chromephp
    #level:  info

ChromePHP упаковывает отладочную информацию в json-кодировке в заголовок X-ChromePhp-Data, который слишком велик для стандартной конфигурации nginx с fastcgi.

Источник: https://github.com/symfony/symfony/issues/8413#issuecomment-20412848

person Lucas Bustamante    schedule 21.09.2017

В итоге мы поняли, что наш единственный сервер, который испытывал это, прервал конфигурацию fpm, в результате чего ошибки / предупреждения / уведомления php, которые обычно записывались на диск, отправлялись через сокет FCGI. Похоже, что есть ошибка синтаксического анализа, когда часть заголовка разделяется на блоки буфера.

Поэтому установки php_admin_value[error_log] на что-то действительно записываемое и перезапуска php-fpm было достаточно, чтобы решить проблему.

Мы могли бы воспроизвести проблему с помощью меньшего скрипта:

<?php
for ($i = 0; $i<$_GET['iterations']; $i++)
    error_log(str_pad("a", $_GET['size'], "a"));
echo "got here\n";

Увеличение буферов сделало 502 труднее, но не невозможным, например, родным:

bash-4.1# for it in {30..200..3}; do for size in {100..250..3}; do echo "size=$size iterations=$it $(curl -sv "http://localhost/debug.php?size=$size&iterations=$it" 2>&1 | egrep '^< HTTP')"; done; done | grep 502 | head
size=121 iterations=30 < HTTP/1.1 502 Bad Gateway
size=109 iterations=33 < HTTP/1.1 502 Bad Gateway
size=232 iterations=33 < HTTP/1.1 502 Bad Gateway
size=241 iterations=48 < HTTP/1.1 502 Bad Gateway
size=145 iterations=51 < HTTP/1.1 502 Bad Gateway
size=226 iterations=51 < HTTP/1.1 502 Bad Gateway
size=190 iterations=60 < HTTP/1.1 502 Bad Gateway
size=115 iterations=63 < HTTP/1.1 502 Bad Gateway
size=109 iterations=66 < HTTP/1.1 502 Bad Gateway
size=163 iterations=69 < HTTP/1.1 502 Bad Gateway
[... there would be more here, but I piped through head ...]

fastcgi_buffers 16 16k; fastcgi_buffer_size 32k;:

bash-4.1# for it in {30..200..3}; do for size in {100..250..3}; do echo "size=$size iterations=$it $(curl -sv "http://localhost/debug.php?size=$size&iterations=$it" 2>&1 | egrep '^< HTTP')"; done; done | grep 502 | head
size=223 iterations=69 < HTTP/1.1 502 Bad Gateway
size=184 iterations=165 < HTTP/1.1 502 Bad Gateway
size=151 iterations=198 < HTTP/1.1 502 Bad Gateway

Поэтому я считаю, что правильный ответ: исправьте конфигурацию fpm, чтобы она записывала ошибки на диск.

person lyte    schedule 08.08.2017
comment
вы говорите, что может быть ошибка синтаксического анализа nginx, когда часть заголовка разделяется на блоки буфера? - person Sérgio; 22.10.2020
comment
это определенно выглядело так в то время - person lyte; 05.11.2020

У меня есть приложение django, развернутое в EBS, и я использую Python 3.8, работающий на 64-битной Amazon Linux 2. Следующий метод сработал для меня (обратите внимание, что структура папок может быть ОТЛИЧНОЙ, если вы используете предыдущие версии Linux. Подробнее см. официальная документация здесь

Создайте папку .platform и ее подкаталог, как показано ниже:

|-- .ebextensions          # Don't put nginx config here
|   |-- django.config        
|-- .platform              # Make ".platform" folder and its subfolders
    |-- nginx                
    |   -- conf.d
    |       -- proxy.conf

Обратите внимание, что файл proxy.conf следует помещать в папку .platform, а НЕ в папку .ebextensions или .elasticbeanstalk. папка. Расширение должно заканчиваться на .conf НЕ .config.

Внутри файла proxy.conf скопируйте и вставьте эти строки напрямую:

client_max_body_size 50M;
large_client_header_buffers 4 32k;
fastcgi_buffers 16 32k;
fastcgi_buffer_size 32k;
proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;

Нет необходимости вводить команду для перезапуска nginx (для Amazon Linux 2)

Снова разверните исходный код в эластичном beanstalk.

person camole    schedule 05.06.2021
comment
Чувак, это безумие .... это решило мою проблему. Я использую Elastic Beanstalk Node.js 14 на 64-битной платформе Amazon Linux 2 / 5.3.2. - person Sagar Khatri; 05.06.2021

Добавлять:

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;

К серверу {} в nginx.conf

Работает для меня.

person Jorge Cuerdo    schedule 22.12.2020

Это по-прежнему самый высокий SO-вопрос в Google при поиске этой ошибки, поэтому давайте его затронем.

Получив эту ошибку и не желая сразу углубляться в настройки NGINX, вы можете проверить свои выходные данные в консоли отладки. В моем случае я выводил множество текста на консоль FirePHP / Chromelogger, и, поскольку все это отправляется как заголовок, это вызывало переполнение.

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

person DavidKunz    schedule 19.12.2019

Я не уверен, что проблема связана с тем, какой заголовок отправляет php. Убедитесь, что буферизация включена. Самый простой способ - создать файл proxy.conf:

proxy_redirect          off;
proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    100m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffering         on;
proxy_buffer_size       128k;
proxy_buffers           4 256k;
proxy_busy_buffers_size 256k;

И файл fasgi.conf:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;
fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;
fastcgi_buffers 128 4096k;
fastcgi_buffer_size 4096k;
fastcgi_index  index.php;
fastcgi_param  REDIRECT_STATUS    200;

Затем вам нужно вызвать их на своем сервере конфигурации по умолчанию следующим образом:

http {
  include    /etc/nginx/mime.types;
  include    /etc/nginx/proxy.conf;
  include    /etc/nginx/fastcgi.conf;
  index    index.html index.htm index.php;
  log_format   main '$remote_addr - $remote_user [$time_local]  $status '
    '"$request" $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';
  #access_log   /logs/access.log  main;
  sendfile     on;
  tcp_nopush   on;
 # ........
}
person macherif    schedule 23.04.2020

Столкнулся с той же проблемой при запуске приложения Symfony в php-fpm и nginx в контейнерах докеров.

После некоторых исследований было обнаружено, что это было вызвано stderr php-fpm, записанным в журналы nginx. Т.е. предупреждения php (которые интенсивно генерируются в режиме отладки Symfony) продублированы в docker logs php-fpm:

[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: ""
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: "NOTICE: PHP message: [debug] Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\DisallowRobotsIndexingListener::onResponse"."
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: ""
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: "NOTICE: PHP message: [debug] Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\StreamedResponseListener::onKernelResponse"."
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: ""
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: "NOTICE: PHP message: [debug] Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelFinishRequest"."
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: ""
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: "NOTICE: PHP message: [debug] Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelFinishRequest"."
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: ""
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: "NOTICE: PHP message: [debug] Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleAwareListener::onKernelFinishRequest"."
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: ""
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: "NOTICE: PHP message: [debug] Notified event "kernel.terminate" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelTerminate"."
[09-Jul-2021 12:25:46] WARNING: [pool www] child 38 said into stderr: ""

и docker logs nginx:

2021/07/09 12:25:46 [error] 30#30: *2 FastCGI sent in stderr: "ller" to listener "OblgazAPI\API\Common\Infrastructure\EventSubscriber\LegalAuthenticationChecker::checkAuthentication".

PHP message: [debug] Notified event "kernel.controller_arguments" to listener "Symfony\Component\HttpKernel\EventListener\ErrorListener::onControllerArguments".

PHP message: [debug] Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ResponseListener::onKernelResponse".

PHP message: [debug] Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelResponse".

PHP message: [debug] Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelResponse".

PHP message: [debug] Notified event "kernel.response" to listener "Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener::onKernelResponse".

PHP message: [debug] Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\DisallowRobotsIndexingListener::onResponse".

PHP message: [debug] Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\StreamedResponseListener::onKernelResponse".

PHP message: [debug] Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelFinishRequest".

PHP message: [debug] Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelFinishRequest".

PHP message: [debug] Notified event "kernel.finish_request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleAwareListener::onKernelFinishRequest".

PHP message: [debug] Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ErrorListener::logKernelException".

PHP message: [debug] Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelException".

а затем журналы nginx заканчивались

2021/07/09 12:25:46 [error] 30#30: *2 upstream sent too big header while reading response header from upstream ...

и я получил ошибку 502.

Увеличение fastcgi_buffer_size в конфигурации nginx помогло, но это больше похоже на подавление проблемы, а не на лечение.

Лучшее решение - отключить php-fpm для отправки журналов с помощью FastCGI. Нашел это можно сделать установив fastcgi.logging=0 в php.ini (по умолчанию 1). php docs.

После изменения на 0 проблема исчезнет, ​​и логи nginx выглядят намного чище docker logs nginx:

172.18.0.1 - - [09/Jul/2021:12:36:02 +0300] "GET /my/symfony/app HTTP/1.1" 401 73 "-" "PostmanRuntime/7.26.8"
172.18.0.1 - - [09/Jul/2021:12:36:04 +0300] "GET /my/symfony/app HTTP/1.1" 401 73 "-" "PostmanRuntime/7.26.8"

и все журналы php-fpm по-прежнему находятся на своих местах в журнале php-fpm.

person Ilia Yatsenko    schedule 09.07.2021

В нашем случае мы получили эту ошибку nginx, потому что наш бэкэнд сгенерировал ответ перенаправления с очень длинным URL:

HTTP/1.1 301 Moved Permanently 
Location: https://www.example.com/?manyParamsHere...

Из любопытства мы сохранили этот большой URL-адрес в файл размером 4,4 КБ.

Добавление двух строк в файл конфигурации /etc/nginx/conf.d/some_site.conf помогло нам исправить эту ошибку:

server {
    # ...
    location ~ ^/index\.php(/|$) {
        fastcgi_pass php-upstream;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        # Add these lines:
        fastcgi_buffer_size 32k;
        fastcgi_buffers 4 32k;
    }
}

Подробнее об этих параметрах читайте в официальной документации nginx.

person yesnik    schedule 18.03.2021
comment
Объясните, пожалуйста, почему нужно добавлять эти строки. - person bfontaine; 25.03.2021