tag sección que página para encabezado códigos código codigo agregar adición nginx php

nginx - sección - upstream envió un encabezado demasiado grande al leer el encabezado de respuesta de la parte superior



que es codigo de encabezado (6)

Si está utilizando el framework Symfony:

Antes de jugar con la configuración de Nginx, intente desactivar ChromePHP primero.

1 - Abrir app / config / config_dev.yml

2 - Comenta estas líneas:

#chromephp: #type: chromephp #level: info

ChromePHP incluye la información de depuración json codificada en el encabezado X-ChromePhp-Data, que es demasiado grande para la configuración predeterminada de nginx con fastcgi.

Fuente: https://github.com/symfony/symfony/issues/8413#issuecomment-20412848

Estoy recibiendo este tipo de errores:

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

Siempre es lo mismo. Una url repetida una y otra vez con la separación de coma. No puedo entender qué está causando esto. ¿Alguien tiene una idea?

Actualización: Otro error:

http request count is zero while sending response to client

Aquí está la configuración. Hay otras cosas irrelevantes, pero esta parte fue agregada / editada

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; }

Y luego en el bloque del servidor: establece $ 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"; }`


Si nginx se está ejecutando como un proxy / proxy inverso

es decir, para los usuarios de ngx_http_proxy_module

Además de fastcgi , el módulo proxy también guarda el encabezado de solicitud en un búfer temporal.

Por lo tanto, es posible que también necesite aumentar proxy_buffer_size y proxy_buffers , o deshabilitarlo por completo (lea la documentación de nginx ).

Ejemplo de configuración de almacenamiento intermedio de proxy

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

Ejemplo de deshabilitar el búfer de proxy (recomendado para servidores de sondeo largos)

http { proxy_buffering off; }

Para más información: documentación del módulo de proxy Nginx


Instrucciones Plesk

En Plesk 12, tenía nginx funcionando como un proxy inverso (que creo que es el predeterminado). Entonces la respuesta superior actual no funciona ya que nginx también se está ejecutando como un proxy.

Fui a 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 .

Luego, en la parte inferior de esa página, puede configurar las directivas adicionales nginx que configuro como una combinación de las dos respuestas principales aquí:

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


Agregue lo siguiente a su archivo conf

fastcgi_buffers 16 16k; fastcgi_buffer_size 32k;


Terminamos dándonos cuenta de que nuestro único servidor que estaba experimentando esto había reventado las configuraciones de fpm que resultaban en errores / advertencias / avisos de php que normalmente se registraban en el disco y que se enviaban a través del socket FCGI. Parece que hay un error de análisis cuando una parte del encabezado se divide entre los fragmentos del buffer.

Así que establecer php_admin_value[error_log] en algo realmente grabable y reiniciar php-fpm fue suficiente para solucionar el problema.

Podríamos reproducir el problema con un script más pequeño:

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

Al aumentar los buffers, los 502 fueron más difíciles de alcanzar, pero no imposibles, por ejemplo, nativos:

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

Así que creo que la respuesta correcta es: corrija su configuración de fpm para que registre los errores en el disco.


upstream sent too big header while reading response header from upstream es la manera genérica de nginx de decir "No me gusta lo que estoy viendo"

  1. Tu cadena de servidor en sentido ascendente se bloqueó
  2. El servidor ascendente devolvió un encabezado no válido
  3. El Aviso / Advertencias enviadas desde STDERR desbordaron su búfer y tanto él como STDOUT se cerraron

3: Mire los registros de errores que se encuentran arriba del mensaje, ¿se está transmitiendo con líneas registradas que preceden al mensaje? PHP message: PHP Notice: Undefined index: fragmento de ejemplo de un bucle de mi archivo de registro:

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

se puede ver en la 3ra línea desde abajo que el límite del buffer fue golpeado, roto, y el siguiente hilo escribió sobre él. Nginx luego cerró la conexión y devolvió 502 al cliente.

2: registra todos los encabezados enviados por solicitud, revísalos y asegúrate de que se ajusten a los estándares (nginx no permite nada más de 24 horas para eliminar / caducar una cookie, enviando contenido no válido porque los mensajes de error se almacenaron antes de contar el contenido). ..). la llamada a la función getallheaders generalmente puede ayudar en situaciones abstractas de código php obtener todos los encabezados

Ejemplos incluyen:

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

y esto:

<?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: verifique, o cree un registro de scripts, para asegurarse de que su subproceso esté llegando al punto final correcto y que no salga antes de completarse.