Intereting Posts
Помощь в Windows-пути – PHP Как не индексировать URL-адреса? Как я могу использовать функцию preg_replace PHP для преобразования кодовых точек Unicode в реальные символы / объекты HTML? получить массив значений столбцов в codeigniter Как преобразовать AVI-файл в формат FLV с помощью PHP? Включить контент WordPress вне WordPress Поле запроса корневого объекта в доктрине (объединенное) наследование таблицы классов Как я могу зашифровать AES в C #, чтобы расшифровать его в PHP? PHP Сохранить форму в изображение или PDF с помощью стиля PHP Загрузка файлов – проверка только изображений Laravel: я не могу отправить более двух переменных из контроллера в режим просмотра Уникальное ограничение электронной почты для проверки подлинности Laravel 4 SimpleXML: Как найти число детей элемента верхнего уровня? Правильное кодирование символов для отображения «& acirc; & # 128; & # 157;»? Почему валидатор w3c не может загружать SGML :: Parser Perl: OpenSP?

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

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

2014/05/24 11:49:06 [error] 8376#0: *54031 upstream sent too big header while reading response header from upstream, client: 107.21.193.210, server: aamjanata.com, request: "GET /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-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-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-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-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/,%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"; }` 

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

 fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; 

Если 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

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: проверьте или создайте журнал сценариев, чтобы убедиться, что поток достигнет нужной конечной точки и не выйдет до завершения.

Инструкции Plesk

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

Я пошел в Subscriptions | [subscription domain] | Websites & Domains (tab) | [Virtual Host domain] | Web Server Settings Subscriptions | [subscription domain] | Websites & Domains (tab) | [Virtual Host domain] | Web Server Settings 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; 

Если вы используете платформу Symfony:

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

1 – Открыть приложение / config / config_dev.yml

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

 #chromephp: #type: chromephp #level: info 

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

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

Мы поняли, что наш один сервер, который испытывал это, столкнулся с fpm config, в результате чего 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-е место более сложным, но не невозможным, например, native:

 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 config, чтобы он регистрировал ошибки на диске.